Commit 9f57fcf01c83c0496e105bf9d43ea35019cd954e

Authored by anderson.peterle@previdencia.gov.br
1 parent 2c54a33b
Exists in master

Exclusão para reposição com versão 2.6-Beta-2

git-svn-id: http://svn.softwarepublico.gov.br/svn/cacic/cacic/trunk/agente-windows@954 fecfc0c7-e812-0410-ae72-849f08638ee7
mapa/FormConfig.ddp
No preview for this file type
mapa/FormConfig.dfm
... ... @@ -1,260 +0,0 @@
1   -object Configs: TConfigs
2   - Left = 164
3   - Top = 137
4   - Width = 409
5   - Height = 217
6   - Caption =
7   - 'MapaCacic - M'#243'dulo Avulso para Coleta de Informa'#231#245'es Patrimoniai' +
8   - 's'
9   - Color = clBtnFace
10   - Font.Charset = DEFAULT_CHARSET
11   - Font.Color = clWindowText
12   - Font.Height = -11
13   - Font.Name = 'MS Sans Serif'
14   - Font.Style = []
15   - Icon.Data = {
16   - 0000010001003232000001000800E00F00001600000028000000320000006400
17   - 00000100080000000000B80B0000000000000000000000010000000000000000
18   - 0000FFFFFF006699FF0099FFFF0066FFFF000033FF00002BD70000156A001534
19   - 380065CA320063C6310052A529004B9625002C59160066CC330066CB330060C0
20   - 30005DBA2F0059B12D00376D1C004589240059B233001A350F003C77240054A8
21   - 370034672200234618001E3B150050A23C00478A37000F1E0C004F9940001223
22   - 0F00315D2A00152A1200539E4A003D7238002A5028001223130026462800438E
23   - 49000E1C10003F874B003A7E4600326D3D00101F130068BD7B00457C57006BC0
24   - 8A00294935006FC395000B16120012231D001B413500357B680074C7B0002851
25   - 47001B4239000E1B18006AB4AA007BD0C400183E3B000F2524007FD5D2008BE9
26   - E70088E4E30086E0DE00183E3E004FC8C8003D9A9A00193F3F001C4444001C41
27   - 41001F4545001E3B3B0097FDFD0095FAFA008EEEEE008CEBEB0087E2E20081D8
28   - D8005D9C9C003B63630098FEFE0093F5F50090F0F00079CACA006BB3B300416C
29   - 6C0047757500122E2F00235455006FBBBF004D8285004A7C7F0015353800538D
30   - 94003255590060A2A900416F76002B494D0050878E002C6D79001526290078CB
31   - D8004D8590001C30350031C4F60033CCFF0033CAFD0032C5F80031BFF10031B8
32   - EA0032B0E400296781001E36400032AADD0013354400508EAA004E89A3001E34
33   - 3E0033A1D50035A5DA005CA3C800369AD00030566A0061ACD5003892CA000409
34   - 0C00569BC600368BC2000E1A220027475D00223F55000B263D001D4F78003C89
35   - C500060C1100549BD5001F394E004F92CC00235A8E004388CD00285B99004688
36   - D6004989D200335E93001E324900030C180010315B0018315100071934003369
37   - B500020407003E7ED600152A4800080E17004F88D8004D85D300548DE1001444
38   - 96005A8EE9005C90EC000C131F005E92F000141F33001145AD00010204000305
39   - 09000E1625001B2A47000D1422000B111D00111A2C000F1727001E2E4D004A70
40   - BC003956910036528900273B63006598FE006395F9006295F7006192F4006090
41   - F1005E8EED005B8AE500517ACC004C73C000486CB500466AB1004264A7004162
42   - A4004060A1006597FD006496FA005E8DEB005D8BE9005A87E1005985DF005782
43   - DA00547ED2004E75C3004466AA003F5E9D00354F8400324B7D002C426E002A3F
44   - 690024365A0022335500203050001A2741003C5A95000A0F1A00162138002639
45   - 60004F76C6004567AD000E3288000F2B70000938B900040D2400184AD2000736
46   - C50002030600032BBF000837D7000629A7000032FE000031FD000031F9000031
47   - F5000030F100002FEB00002CDF000029D0000028C8000026BF000024B600001E
48   - 9800001D9300001A880000187D0000156C0000156B0000146400000E4900000A
49   - 3500000724000230E3000534E60000051D0001092D0000000100FFFFFF000000
50   - 0000F9FC00000000000000000000000000000000000000000000000000000000
51   - 00000000000000000000FC0000000000000000000000F6F60000000000000000
52   - 000000000000000000000000000000000000000000000000000000000000F0F8
53   - 000000000000000000FDE8E7F800000000000000000000000000000000000000
54   - 0000000000000000000000000000000000F705EBF900000000000000F9ED0505
55   - ECF9000000000000000000000000000000000000000000000000000000000000
56   - 00000000FDE90505F100000000000000F605050505F800000000000000000000
57   - 000000000000000000000000000000000000000000000000F7050505E5F80000
58   - 000000F9EA05050505F600000000000000000000000000000000000000000000
59   - 000000000000000000000000E4E5050505EE0000000000F705050505E5EE0000
60   - 00000000000000000000000000000000000000000000000000000000000000FD
61   - E905050505E5FD00000000A5DCEAE5E6EAEFDE00000000000000000000000000
62   - 00000000000000000000000000000000000000DEEDE8050506DCA30000008057
63   - 5096EBDB7D626A00000000000000000000000000000000000000000000000000
64   - 0000000000000064608BE2E2844E630000008356034D96840303640000000000
65   - 0000000000000000ABAEAEAEAE00000000000000000000000000005D034C9B85
66   - 4C036000000083500303424F0303630000000000000000ABA5CFD5BDBBC5B4B7
67   - C8BCC0CDAAA90000000000000000995703535655030362000000805703030303
68   - 03035E0000000000A9D7B1BA02020202020202020202020202B5BDD2AE000000
69   - 0000895C0303030303036300000000614B030303030364000000A3D3C6020202
70   - 02020202020202020202020202020202C3B1A900000000605303030303546A00
71   - 0000001E314F030303503300D6A5BB0202020202020202020202B70202020202
72   - 020202020202B8CFAB0000344D030353562720000000002012275603572720A3
73   - C102020202020202020202B9D5D2B3D1CFBD02020202020202020202C7A5001E
74   - 3150033B250B290000000080170A2531171433CAC3020202020202020202C7D3
75   - BCB40202C4D5B3B70202020202020202C2B7D4290B2138190F1A000000000000
76   - 2914091A091BB09F7C8E0202020202020202D3B9020202020202BBB302020202
77   - 020202B67F7FA2AE190E110E1020000000000000AD515959A226A19E716D7FB5
78   - 0202020202D9B10202020202020202CCBF0202020202A47C6C799DB720090E0F
79   - 1A000000000000AE5D593B5159B7717C9E746C7CA40202020202C20202020202
80   - 02020202B502020202A17A6C7C9D747A93190919330000000000AB5159BD5157
81   - 5159C36C7A9E796C79A10202020202020202020202020202020202029F716C7F
82   - 9D716D88B5261334A300000000006F6590D9BD513B5159B46C719E7C6C79A102
83   - 0202020202020202020202020202029D706D88916F6B88B402BD3A02CDAC0000
84   - 00006F6F6F9FBCBD513B5159026D7091828E0202020202020202020202020202
85   - 020202C288888E6B6F8E02020202020202CF00000000006F6F6E9F9ADA515751
86   - 59B46B74BA02020202020202020202020202020202020202029E6F7091020202
87   - 020202020202D3000000AEC26F6F029F9ABD51575159029D0202020202020202
88   - 02020202020202020202020202028E9D02020202020202020202C6AE0000A502
89   - 026F6D6F9FD9BD513B5159020202020202020202020202020202020202020202
90   - 020202020202020202020202020202D70000ADB4026F6F686E9FD9BD51575102
91   - 0202020202020202020202020202020202020202020202020202020202020202
92   - 020202AD000000C002026F6F6F027A9ABD513B59BAC8C9D9B0BDDABA02020202
93   - 020202BADABDB0D9C9C8BAB8B4020202020202020202BED6000000A3C002026F
94   - 6F6F6E9FD9BD3B5159B1CCBFBEBDBC020202020202020202BCBDBEBFCCB1B2CC
95   - B502020202020202B9D8AC00000000009CB802026F6F6C027A9A515751020202
96   - 02020202020202020202020202020202020202020202020202020202AA000000
97   - 00000000FED4BFB9026F6C6FA4BCBD5151510259595959595959595902020202
98   - 02020202020202020202020202C3CAD0E1000000000000000000FED6A5D20268
99   - 6EB9D951515159595959595959595959595902020202020202020202B9BBC1D0
100   - D4AB9900000000000000000000000000000000026F6F56513B5759595900320F
101   - 00000059595959C1B1CECFD8D2AAA5A9D6A80000000000000000000000000000
102   - 0000000000000000026F6F6F59595959000F0F0F000000000059595900000000
103   - 0000000000000000000000000000000000000000000000000000000000006F6F
104   - 5959590000000000000000000000595959000000000000000000000000000000
105   - 0000000000000000000000000000000000000059595906060606060606060606
106   - 0606065959590000000000000000000000000000000000000000000000000000
107   - 00000000000000595906060F0F0F060606060606060606065959000000000000
108   - 0000000000000000000000000000000000FD070707070707070759595906060F
109   - 0F06060606060606060606062E5959070707070707070707070707F4FC000000
110   - 0000000000F8EF06060606060606595959060F0F060606060606060606060606
111   - 0F5959060606060606060606060606F100000000000000000000945A08080808
112   - 0859590000000000000F0F0F0000000000000000005959080808080808080808
113   - 085F3E0000000000000000000000005A4404040404595932033204040F0F0404
114   - 040404040404040404595904040404040404040404455A000000000000000000
115   - 000000008646354748595905030332320F3204323204040404040404042F5949
116   - 4375393D49467535474A0000000000000000000000000000EE95175864595959
117   - 0503560F0F04323204040404040404042E59595E78F10D1651DEF11400570000
118   - 000000000000000000000000E8A0103762E65959050556033232320432043204
119   - 040415153259123F77E52B1D038FE91F1F0300000000000000000000000000EF
120   - 05E00A304CE3595959055603032E2E2E2E0505050505151559590F3250EA7211
121   - 42810536184B57000000000000000000000000EE05FA112E03DFDD5959055603
122   - 03012E2E2E0505050505153259E00E324DFA8D093C7B056615555C0000000000
123   - 00000000000000EE05E9152E03DFE0595959560303322E2E2E3205050505322E
124   - 59E009304CE38D0F377E057211415C000000000000000000000000EF05E00932
125   - 4EFBA60E59595903032E2E2E2E3205050505595959A60E3768E76615558C0536
126   - 184B570000000000000000000000000005A00A375C058711405959592E2E2E2E
127   - 2E05050559595959058712407B052A1C0398E81C230300000000000000000000
128   - 0000000006380C5669EB2C143F8D5959592E2E2E2E32595959593F65EB2C143F
129   - 92ED0B2442E4EF122F5600000000000000000000000000000700005800070000
130   - 5800000D5959595959595959000059000700005800000D005800000D00000000
131   - 000000000000F3FFFFFFFFF7C000F3FFFFFFFFF3C000E1FFFFFFFFE1C000C0FF
132   - FFFFFFC1C000C0FFFFFFFFC0C00080FFFFFFFFC0C00080FFFFFFFF804000807F
133   - FFFFFF804000007FFFFFFF804000007FFC1FFF804000007F8000FF004000007C
134   - 00001F0040008070000007804000804000000180400080000000008040008000
135   - 00000000C000C00000000000C000C00000000001C000800000000001C0000000
136   - 00000001C000000000000000C000000000000000C00080000000000040000000
137   - 0000000000000000000000000000000000000000000080000000000000008000
138   - 0000000040008000000000004000800000000000400080000000000040008000
139   - 00000000C000C00000000000C000C00000000000C000C00000000001C000E000
140   - 00000001C000E00000000001C000E00000000003C000F00000000007C000F800
141   - 00000007C000FC000000000FC000FC000000002FC000FC000000000FC000F800
142   - 00000007C000F80000000007C000F80000000007C000F80000000007C000FC00
143   - 0000000FC000FC000000000FC000FDAD8035B5BFC000}
144   - OldCreateOrder = False
145   - Position = poScreenCenter
146   - OnCreate = FormCreate
147   - PixelsPerInch = 96
148   - TextHeight = 13
149   - object Button_Gravar: TButton
150   - Left = 56
151   - Top = 123
152   - Width = 121
153   - Height = 25
154   - Caption = 'Grava Configura'#231#245'es'
155   - TabOrder = 0
156   - OnClick = Button_GravarClick
157   - end
158   - object btCancelaOperacao: TButton
159   - Left = 219
160   - Top = 123
161   - Width = 121
162   - Height = 25
163   - Caption = 'Cancela Opera'#231#227'o'
164   - TabOrder = 1
165   - OnClick = btCancelaOperacaoClick
166   - end
167   - object pnConfiguracoes: TPanel
168   - Left = 9
169   - Top = 9
170   - Width = 382
171   - Height = 98
172   - TabOrder = 2
173   - object Label_ip_serv_cacic: TLabel
174   - Left = 15
175   - Top = 34
176   - Width = 208
177   - Height = 13
178   - Caption = 'Identificador do Servidor WEB (IP ou Nome)'
179   - Font.Charset = DEFAULT_CHARSET
180   - Font.Color = clWindowText
181   - Font.Height = -11
182   - Font.Name = 'MS Sans Serif'
183   - Font.Style = []
184   - ParentFont = False
185   - end
186   - object Label_cacic_dir: TLabel
187   - Left = 256
188   - Top = 34
189   - Width = 109
190   - Height = 13
191   - Caption = 'Pasta do Agente Cacic'
192   - Font.Charset = DEFAULT_CHARSET
193   - Font.Color = clWindowText
194   - Font.Height = -11
195   - Font.Name = 'MS Sans Serif'
196   - Font.Style = []
197   - ParentFont = False
198   - end
199   - object lbConfiguracoes: TLabel
200   - Left = 4
201   - Top = 8
202   - Width = 374
203   - Height = 16
204   - Alignment = taCenter
205   - AutoSize = False
206   - Caption = 'Configura'#231#245'es B'#225'sicas'
207   - Font.Charset = DEFAULT_CHARSET
208   - Font.Color = clWindowText
209   - Font.Height = -15
210   - Font.Name = 'MS Sans Serif'
211   - Font.Style = [fsBold]
212   - ParentFont = False
213   - end
214   - object Edit_ip_serv_cacic: TEdit
215   - Left = 15
216   - Top = 50
217   - Width = 208
218   - Height = 21
219   - MaxLength = 100
220   - TabOrder = 0
221   - Text = 'uxrjo115'
222   - OnExit = Edit_ip_serv_cacicExit
223   - end
224   - object Edit_cacic_dir: TEdit
225   - Left = 256
226   - Top = 50
227   - Width = 110
228   - Height = 21
229   - MaxLength = 15
230   - TabOrder = 1
231   - Text = 'Cacic'
232   - OnExit = Edit_cacic_dirExit
233   - end
234   - end
235   - object pnVersao: TPanel
236   - Left = 343
237   - Top = 167
238   - Width = 56
239   - Height = 14
240   - BevelOuter = bvLowered
241   - TabOrder = 3
242   - object lbVersao: TLabel
243   - Left = 7
244   - Top = 1
245   - Width = 41
246   - Height = 12
247   - Caption = 'v: X.X.X.X'
248   - Font.Charset = DEFAULT_CHARSET
249   - Font.Color = clWindowText
250   - Font.Height = -9
251   - Font.Name = 'Arial'
252   - Font.Style = []
253   - ParentFont = False
254   - end
255   - end
256   - object PJVersionInfo1: TPJVersionInfo
257   - Left = 175
258   - Top = 121
259   - end
260   -end
mapa/FormConfig.pas
... ... @@ -1,123 +0,0 @@
1   -(**
2   ----------------------------------------------------------------------------------------------------------------------------------------------------------------
3   -Copyright 2000, 2001, 2002, 2003, 2004, 2005 Dataprev - Empresa de Tecnologia e Informações da Previdência Social, Brasil
4   -
5   -Este arquivo é parte do programa CACIC - Configurador Automático e Coletor de Informações Computacionais
6   -
7   -O CACIC é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como
8   -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença, ou (na sua opinião) qualquer versão.
9   -
10   -Este programa é distribuido na esperança que possa ser util, mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
11   -MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.
12   -
13   -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software
14   -Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
15   ----------------------------------------------------------------------------------------------------------------------------------------------------------------
16   -*)
17   -
18   -unit FormConfig;
19   -
20   -interface
21   -
22   -uses
23   - Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
24   - Dialogs, StdCtrls,main_mapa, PJVersionInfo, NTFileSecurity, ExtCtrls;
25   -
26   -type
27   - TConfigs = class(TForm)
28   - Button_Gravar: TButton;
29   - PJVersionInfo1: TPJVersionInfo;
30   - btCancelaOperacao: TButton;
31   - pnConfiguracoes: TPanel;
32   - Label_ip_serv_cacic: TLabel;
33   - Edit_ip_serv_cacic: TEdit;
34   - Label_cacic_dir: TLabel;
35   - Edit_cacic_dir: TEdit;
36   - lbConfiguracoes: TLabel;
37   - pnVersao: TPanel;
38   - lbVersao: TLabel;
39   - procedure Button_GravarClick(Sender: TObject);
40   - procedure Edit_ip_serv_cacicExit(Sender: TObject);
41   - procedure Edit_cacic_dirExit(Sender: TObject);
42   - procedure GravaConfiguracoes;
43   - procedure btCancelaOperacaoClick(Sender: TObject);
44   - procedure FormCreate(Sender: TObject);
45   - private
46   - { Private declarations }
47   - public
48   - { Public declarations }
49   - end;
50   -
51   -var
52   - Configs: TConfigs;
53   - v_ip_serv_cacic,
54   - v_cacic_dir : String;
55   -
56   -
57   -implementation
58   -
59   -{$R *.dfm}
60   -
61   -procedure TConfigs.Button_GravarClick(Sender: TObject);
62   -begin
63   - Configs.GravaConfiguracoes;
64   - Close;
65   -end;
66   -
67   -procedure TConfigs.GravaConfiguracoes;
68   -var mapa_ini : TextFile;
69   -begin
70   - try
71   - FileSetAttr (ExtractFilePath(Application.Exename) + '\MapaCacic.ini',0); // Retira os atributos do arquivo para evitar o erro FILE ACCESS DENIED em máquinas 2000
72   - AssignFile(mapa_ini,ExtractFilePath(Application.Exename) + '\MapaCacic.ini'); {Associa o arquivo a uma variável do tipo TextFile}
73   - Rewrite (mapa_ini); // Recria o arquivo...
74   - Append(mapa_ini);
75   - Writeln(mapa_ini,'');
76   - Writeln(mapa_ini,'# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #');
77   - Writeln(mapa_ini,'# CHAVES E VALORES OBRIGATÓRIOS PARA USO DO MapaCacic.exe #');
78   - Writeln(mapa_ini,'# ================================================================= #');
79   - Writeln(mapa_ini,'# ip_serv_cacic #');
80   - Writeln(mapa_ini,'# IP ou Identificação do servidor onde o Módulo Gerente do CACIC foi instalado#');
81   - Writeln(mapa_ini,'# Ex.: ip_serv_cacic=UXRJO115 #');
82   - Writeln(mapa_ini,'# ip_serv_cacic=10.xxx.yyy.zzz #');
83   - Writeln(mapa_ini,'# cacic_dir #');
84   - Writeln(mapa_ini,'# Pasta a ser criada na estação para instalação do CACIC agente #');
85   - Writeln(mapa_ini,'# Ex.: cacic_dir=Cacic #');
86   - Writeln(mapa_ini,'# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #');
87   - Writeln(mapa_ini,'');
88   - Writeln(mapa_ini,'[Cacic2]');
89   -
90   - // Atribuição dos valores do form FormConfig às variáveis...
91   - v_ip_serv_cacic := Configs.Edit_ip_serv_cacic.text;
92   - v_cacic_dir := Configs.Edit_cacic_dir.text;
93   -
94   - // Escrita dos parâmetros obrigatórios
95   - Writeln(mapa_ini,'ip_serv_cacic='+v_ip_serv_cacic);
96   - Writeln(mapa_ini,'cacic_dir='+v_cacic_dir);
97   -
98   - CloseFile(mapa_ini); {Fecha o arquivo texto}
99   - except
100   - end;
101   -end;
102   -
103   -procedure TConfigs.Edit_ip_serv_cacicExit(Sender: TObject);
104   -begin
105   -if trim(Edit_ip_serv_cacic.Text) = '' then Edit_ip_serv_cacic.SetFocus;
106   -end;
107   -
108   -procedure TConfigs.Edit_cacic_dirExit(Sender: TObject);
109   -begin
110   -if trim(Edit_cacic_dir.Text) = '' then Edit_cacic_dir.Text := 'Cacic';
111   -end;
112   -
113   -procedure TConfigs.btCancelaOperacaoClick(Sender: TObject);
114   -begin
115   - Application.Terminate;
116   -end;
117   -
118   -procedure TConfigs.FormCreate(Sender: TObject);
119   -begin
120   - Configs.lbVersao.Caption := 'v: ' + frmMapaCacic.GetVersionInfo(ParamStr(0));
121   -end;
122   -
123   -end.
mapa/LEIAME
... ... @@ -1,2 +0,0 @@
1   -
2   -Esse módulo foi desenvolvido para atender à necessidade de coleta de informações patrimoniais de forma seletiva por estação, onde o técnico vai presencialmente e, de posse do nível de acesso "Técnico" no módulo gerente WEB, realiza o preenchimento dos campos relativos ao Patrimônio e Localização Física.
mapa/LibXmlParser.pas
... ... @@ -1,2728 +0,0 @@
1   -(**
2   -===============================================================================================
3   -Name : LibXmlParser
4   -===============================================================================================
5   -Project : All Projects
6   -===============================================================================================
7   -Subject : Progressive XML Parser for all types of XML Files
8   -===============================================================================================
9   -Author : Stefan Heymann
10   - Eschenweg 3
11   - 72076 Tübingen
12   - GERMANY
13   -
14   -E-Mail: stefan@destructor.de
15   -URL: www.destructor.de
16   -===============================================================================================
17   -Source, Legals ("Licence")
18   ---------------------------
19   -The official site to get this parser is http://www.destructor.de/
20   -
21   -Usage and Distribution of this Source Code is ruled by the
22   -"Destructor.de Source code Licence" (DSL) which comes with this file or
23   -can be downloaded at http://www.destructor.de/
24   -
25   -IN SHORT: Usage and distribution of this source code is free.
26   - You use it completely on your own risk.
27   -
28   -Postcardware
29   -------------
30   -If you like this code, please send a postcard of your city to my above address.
31   -===============================================================================================
32   -!!! All parts of this code which are not finished or not conforming exactly to
33   - the XmlSpec are marked with three exclamation marks
34   -
35   --!- Parts where the parser may be able to detect errors in the document's syntax are
36   - marked with the dash-exlamation mark-dash sequence.
37   -===============================================================================================
38   -Terminology:
39   -------------
40   -- Start: Start of a buffer part
41   -- Final: End (last character) of a buffer part
42   -- DTD: Document Type Definition
43   -- DTDc: Document Type Declaration
44   -- XMLSpec: The current W3C XML Recommendation (version 1.0 as of 1998-02-10), Chapter No.
45   -- Cur*: Fields concerning the "Current" part passed back by the "Scan" method
46   -===============================================================================================
47   -Scanning the XML document
48   --------------------------
49   -- Create TXmlParser Instance MyXml := TXmlParser.Create;
50   -- Load XML Document MyXml.LoadFromFile (Filename);
51   -- Start Scanning MyXml.StartScan;
52   -- Scan Loop WHILE MyXml.Scan DO
53   -- Test for Part Type CASE MyXml.CurPartType OF
54   -- Handle Parts ... : ;;;
55   -- Handle Parts ... : ;;;
56   -- Handle Parts ... : ;;;
57   - END;
58   -- Destroy MyXml.Free;
59   -===============================================================================================
60   -Loading the XML document
61   -------------------------
62   -You can load the XML document from a file with the "LoadFromFile" method.
63   -It is beyond the scope of this parser to perform HTTP or FTP accesses. If you want your
64   -application to handle such requests (URLs), you can load the XML via HTTP or FTP or whatever
65   -protocol and hand over the data buffer using the "LoadFromBuffer" or "SetBuffer" method.
66   -"LoadFromBuffer" loads the internal buffer of TXmlParser with the given null-terminated
67   -string, thereby creating a copy of that buffer.
68   -"SetBuffer" just takes the pointer to another buffer, which means that the given
69   -buffer pointer must be valid while the document is accessed via TXmlParser.
70   -===============================================================================================
71   -Encodings:
72   -----------
73   -This XML parser kind of "understands" the following encodings:
74   -- UTF-8
75   -- ISO-8859-1
76   -- Windows-1252
77   -
78   -Any flavor of multi-byte characters (and this includes UTF-16) is not supported. Sorry.
79   -
80   -Every string which has to be passed to the application passes the virtual method
81   -"TranslateEncoding" which translates the string from the current encoding (stored in
82   -"CurEncoding") into the encoding the application wishes to receive.
83   -The "TranslateEncoding" method that is built into TXmlParser assumes that the application
84   -wants to receive Windows ANSI (Windows-1252, about the same as ISO-8859-1) and is able
85   -to convert UTF-8 and ISO-8859-1 encodings.
86   -For other source and target encodings, you will have to override "TranslateEncoding".
87   -===============================================================================================
88   -Buffer Handling
89   ----------------
90   -- The document must be loaded completely into a piece of RAM
91   -- All character positions are referenced by PChar pointers
92   -- The TXmlParser instance can either "own" the buffer itself (then, FBufferSize is > 0)
93   - or reference the buffer of another instance or object (then, FBuffersize is 0 and
94   - FBuffer is not NIL)
95   -- The Property DocBuffer passes back a pointer to the first byte of the document. If there
96   - is no document stored (FBuffer is NIL), the DocBuffer returns a pointer to a NULL character.
97   -===============================================================================================
98   -Whitespace Handling
99   --------------------
100   -The TXmlParser property "PackSpaces" determines how Whitespace is returned in Text Content:
101   -While PackSpaces is true, all leading and trailing whitespace characters are trimmed of, all
102   -Whitespace is converted to Space #x20 characters and contiguous Whitespace characters are
103   -compressed to one.
104   -If the "Scan" method reports a ptContent part, the application can get the original text
105   -with all whitespace characters by extracting the characters from "CurStart" to "CurFinal".
106   -If the application detects an xml:space attribute, it can set "PackSpaces" accordingly or
107   -use CurStart/CurFinal.
108   -Please note that TXmlParser does _not_ normalize Line Breaks to single LineFeed characters
109   -as the XmlSpec requires (XmlSpec 2.11).
110   -The xml:space attribute is not handled by TXmlParser. This is on behalf of the application.
111   -===============================================================================================
112   -Non-XML-Conforming
113   -------------------
114   -TXmlParser does not conform 100 % exactly to the XmlSpec:
115   -- UTF-16 is not supported (XmlSpec 2.2)
116   - (Workaround: Convert UTF-16 to UTF-8 and hand the buffer over to TXmlParser)
117   -- As the parser only works with single byte strings, all Unicode characters > 255
118   - can currently not be handled correctly.
119   -- Line breaks are not normalized to single Linefeed #x0A characters (XmlSpec 2.11)
120   - (Workaround: The Application can access the text contents on its own [CurStart, CurFinal],
121   - thereby applying every normalization it wishes to)
122   -- The attribute value normalization does not work exactly as defined in the
123   - Second Edition of the XML 1.0 specification.
124   -- See also the code parts marked with three consecutive exclamation marks. These are
125   - parts which are not finished in the current code release.
126   -
127   -This list may be incomplete, so it may grow if I get to know any other points.
128   -As work on the parser proceeds, this list may also shrink.
129   -===============================================================================================
130   -Things Todo
131   ------------
132   -- Introduce a new event/callback which is called when there is an unresolvable
133   - entity or character reference
134   -- Support Unicode
135   -- Use Streams instead of reading the whole XML into memory
136   -===============================================================================================
137   -Change History, Version numbers
138   --------------------------------
139   -The Date is given in ISO Year-Month-Day (YYYY-MM-DD) order.
140   -Versions are counted from 1.0.0 beginning with the version from 2000-03-16.
141   -Unreleased versions don't get a version number.
142   -
143   -Date Author Version Changes
144   ------------------------------------------------------------------------------------------------
145   -2000-03-16 HeySt 1.0.0 Start
146   -2000-03-28 HeySt 1.0.1 Initial Publishing of TXmlParser on the destructor.de Web Site
147   -2000-03-30 HeySt 1.0.2 TXmlParser.AnalyzeCData: Call "TranslateEncoding" for CurContent
148   -2000-03-31 HeySt 1.0.3 Deleted the StrPosE function (was not needed anyway)
149   -2000-04-04 HeySt 1.0.4 TDtdElementRec modified: Start/Final for all Elements;
150   - Should be backwards compatible.
151   - AnalyzeDtdc: Set CurPartType to ptDtdc
152   -2000-04-23 HeySt 1.0.5 New class TObjectList. Eliminated reference to the Delphi 5
153   - "Contnrs" unit so LibXmlParser is Delphi 4 compatible.
154   -2000-07-03 HeySt 1.0.6 TNvpNode: Added Constructor
155   -2000-07-11 HeySt 1.0.7 Removed "Windows" from USES clause
156   - Added three-exclamation-mark comments for Utf8ToAnsi/AnsiToUtf8
157   - Added three-exclamation-mark comments for CHR function calls
158   -2000-07-23 HeySt 1.0.8 TXmlParser.Clear: CurAttr.Clear; EntityStack.Clear;
159   - (This was not a bug; just defensive programming)
160   -2000-07-29 HeySt 1.0.9 TNvpList: Added methods: Node(Index), Value(Index), Name(Index);
161   -2000-10-07 HeySt Introduced Conditional Defines
162   - Uses Contnrs unit and its TObjectList class again for
163   - Delphi 5 and newer versions
164   -2001-01-30 HeySt Introduced Version Numbering
165   - Made LoadFromFile and LoadFromBuffer BOOLEAN functions
166   - Introduced FileMode parameter for LoadFromFile
167   - BugFix: TAttrList.Analyze: Must add CWhitespace to ExtractName call
168   - Comments worked over
169   -2001-02-28 HeySt 1.0.10 Completely worked over and tested the UTF-8 functions
170   - Fixed a bug in TXmlParser.Scan which caused it to start over when it
171   - was called after the end of scanning, resulting in an endless loop
172   - TEntityStack is now a TObjectList instead of TList
173   -2001-07-03 HeySt 1.0.11 Updated Compiler Version IFDEFs for Kylix
174   -2001-07-11 HeySt 1.0.12 New TCustomXmlScanner component (taken over from LibXmlComps.pas)
175   -2001-07-14 HeySt 1.0.13 Bugfix TCustomXmlScanner.FOnTranslateEncoding
176   -2001-10-22 HeySt Don't clear CurName anymore when the parser finds a CDATA section.
177   -2001-12-03 HeySt 1.0.14 TObjectList.Clear: Make call to INHERITED method (fixes a memory leak)
178   -2001-12-05 HeySt 1.0.15 TObjectList.Clear: removed call to INHERITED method
179   - TObjectList.Destroy: Inserted SetCapacity call.
180   - Reduces need for frequent re-allocation of pointer buffer
181   - Dedicated to my father, Theodor Heymann
182   -2002-06-26 HeySt 1.0.16 TXmlParser.Scan: Fixed a bug with PIs whose name is beginning
183   - with 'xml'. Thanks to Uwe Kamm for submitting this bug.
184   - The CurEncoding property is now always in uppercase letters (the XML
185   - spec wants it to be treated case independently so when it's uppercase
186   - comparisons are faster)
187   -2002-03-04 HeySt 1.0.17 Included an IFDEF for Delphi 7 (VER150) and Kylix
188   - There is a new symbol HAS_CONTNRS_UNIT which is used now to
189   - distinguish between IDEs which come with the Contnrs unit and
190   - those that don't.
191   -*)
192   -
193   -
194   -// --- Delphi/Kylix Version Numbers
195   -// As this is no code, this does not blow up your object or executable code at all
196   - (*$IFDEF LINUX *)
197   - (*$DEFINE K1_OR_NEWER *)
198   - (*$ENDIF *)
199   -
200   - (*$IFDEF MSWINDOWS *)
201   - (*$DEFINE D1_OR_NEWER *)
202   - (*$IFNDEF VER80 *)
203   - (*$DEFINE D2_OR_NEWER *)
204   - (*$IFNDEF VER90 *)
205   - (*$DEFINE D3_OR_NEWER *)
206   - (*$IFNDEF VER100 *)
207   - (*$DEFINE D4_OR_NEWER *)
208   - (*$IFNDEF VER120 *)
209   - (*$DEFINE D5_OR_NEWER *)
210   - (*$IFNDEF VER130 *)
211   - (*$IFNDEF VER140 *)
212   - (*$IFNDEF VER150 *)
213   - If the compiler gets stuck here,
214   - you are using a compiler version unknown to this code.
215   - You will probably have to change this code accordingly.
216   - At first, try to comment out these lines and see what will happen.
217   - (*$ENDIF *)
218   - (*$ENDIF *)
219   - (*$ENDIF *)
220   - (*$ENDIF *)
221   - (*$ENDIF *)
222   - (*$ENDIF *)
223   - (*$ENDIF *)
224   - (*$ENDIF *)
225   -
226   - (*$IFDEF D5_OR_NEWER *)
227   - (*$DEFINE HAS_CONTNRS_UNIT *)
228   - (*$ENDIF *)
229   -
230   - (*$IFDEF K1_OR_NEWER *)
231   - (*$DEFINE HAS_CONTNRS_UNIT *)
232   - (*$ENDIF *)
233   -
234   -
235   -UNIT LibXmlParser;
236   -
237   -INTERFACE
238   -
239   -USES
240   - SysUtils, Classes,
241   - (*$IFDEF HAS_CONTNRS_UNIT *) // The Contnrs Unit was introduced in Delphi 5
242   - Contnrs,
243   - (*$ENDIF*)
244   - Math;
245   -
246   -CONST
247   - CVersion = '1.0.17'; // This variable will be updated for every release
248   - // (I hope, I won't forget to do it everytime ...)
249   -
250   -TYPE
251   - TPartType = // --- Document Part Types
252   - (ptNone, // Nothing
253   - ptXmlProlog, // XML Prolog XmlSpec 2.8 / 4.3.1
254   - ptComment, // Comment XmlSpec 2.5
255   - ptPI, // Processing Instruction XmlSpec 2.6
256   - ptDtdc, // Document Type Declaration XmlSpec 2.8
257   - ptStartTag, // Start Tag XmlSpec 3.1
258   - ptEmptyTag, // Empty-Element Tag XmlSpec 3.1
259   - ptEndTag, // End Tag XmlSpec 3.1
260   - ptContent, // Text Content between Tags
261   - ptCData); // CDATA Section XmlSpec 2.7
262   -
263   - TDtdElemType = // --- DTD Elements
264   - (deElement, // !ELEMENT declaration
265   - deAttList, // !ATTLIST declaration
266   - deEntity, // !ENTITY declaration
267   - deNotation, // !NOTATION declaration
268   - dePI, // PI in DTD
269   - deComment, // Comment in DTD
270   - deError); // Error found in the DTD
271   -
272   -TYPE
273   - TAttrList = CLASS;
274   - TEntityStack = CLASS;
275   - TNvpList = CLASS;
276   - TElemDef = CLASS;
277   - TElemList = CLASS;
278   - TEntityDef = CLASS;
279   - TNotationDef = CLASS;
280   -
281   - TDtdElementRec = RECORD // --- This Record is returned by the DTD parser callback function
282   - Start, Final : PChar; // Start/End of the Element's Declaration
283   - CASE ElementType : TDtdElemType OF // Type of the Element
284   - deElement, // <!ELEMENT>
285   - deAttList : (ElemDef : TElemDef); // <!ATTLIST>
286   - deEntity : (EntityDef : TEntityDef); // <!ENTITY>
287   - deNotation : (NotationDef : TNotationDef); // <!NOTATION>
288   - dePI : (Target : PChar; // <?PI ?>
289   - Content : PChar;
290   - AttrList : TAttrList);
291   - deError : (Pos : PChar); // Error
292   - // deComment : ((No additional fields here)); // <!-- Comment -->
293   - END;
294   -
295   - TXmlParser = CLASS // --- Internal Properties and Methods
296   - PROTECTED
297   - FBuffer : PChar; // NIL if there is no buffer available
298   - FBufferSize : INTEGER; // 0 if the buffer is not owned by the Document instance
299   - FSource : STRING; // Name of Source of document. Filename for Documents loaded with LoadFromFile
300   -
301   - FXmlVersion : STRING; // XML version from Document header. Default is '1.0'
302   - FEncoding : STRING; // Encoding from Document header. Default is 'UTF-8'
303   - FStandalone : BOOLEAN; // Standalone declaration from Document header. Default is 'yes'
304   - FRootName : STRING; // Name of the Root Element (= DTD name)
305   - FDtdcFinal : PChar; // Pointer to the '>' character terminating the DTD declaration
306   -
307   - FNormalize : BOOLEAN; // If true: Pack Whitespace and don't return empty contents
308   - EntityStack : TEntityStack; // Entity Stack for Parameter and General Entities
309   - FCurEncoding : STRING; // Current Encoding during parsing (always uppercase)
310   -
311   - PROCEDURE AnalyzeProlog; // Analyze XML Prolog or Text Declaration
312   - PROCEDURE AnalyzeComment (Start : PChar; VAR Final : PChar); // Analyze Comments
313   - PROCEDURE AnalyzePI (Start : PChar; VAR Final : PChar); // Analyze Processing Instructions (PI)
314   - PROCEDURE AnalyzeDtdc; // Analyze Document Type Declaration
315   - PROCEDURE AnalyzeDtdElements (Start : PChar; VAR Final : PChar); // Analyze DTD declarations
316   - PROCEDURE AnalyzeTag; // Analyze Start/End/Empty-Element Tags
317   - PROCEDURE AnalyzeCData; // Analyze CDATA Sections
318   - PROCEDURE AnalyzeText (VAR IsDone : BOOLEAN); // Analyze Text Content between Tags
319   - PROCEDURE AnalyzeElementDecl (Start : PChar; VAR Final : PChar);
320   - PROCEDURE AnalyzeAttListDecl (Start : PChar; VAR Final : PChar);
321   - PROCEDURE AnalyzeEntityDecl (Start : PChar; VAR Final : PChar);
322   - PROCEDURE AnalyzeNotationDecl (Start : PChar; VAR Final : PChar);
323   -
324   - PROCEDURE PushPE (VAR Start : PChar);
325   - PROCEDURE ReplaceCharacterEntities (VAR Str : STRING);
326   - PROCEDURE ReplaceParameterEntities (VAR Str : STRING);
327   - PROCEDURE ReplaceGeneralEntities (VAR Str : STRING);
328   -
329   - FUNCTION GetDocBuffer : PChar; // Returns FBuffer or a pointer to a NUL char if Buffer is empty
330   -
331   - PUBLIC // --- Document Properties
332   - PROPERTY XmlVersion : STRING READ FXmlVersion; // XML version from the Document Prolog
333   - PROPERTY Encoding : STRING READ FEncoding; // Document Encoding from Prolog
334   - PROPERTY Standalone : BOOLEAN READ FStandalone; // Standalone Declaration from Prolog
335   - PROPERTY RootName : STRING READ FRootName; // Name of the Root Element
336   - PROPERTY Normalize : BOOLEAN READ FNormalize WRITE FNormalize; // True if Content is to be normalized
337   - PROPERTY Source : STRING READ FSource; // Name of Document Source (Filename)
338   - PROPERTY DocBuffer : PChar READ GetDocBuffer; // Returns document buffer
339   - PUBLIC // --- DTD Objects
340   - Elements : TElemList; // Elements: List of TElemDef (contains Attribute Definitions)
341   - Entities : TNvpList; // General Entities: List of TEntityDef
342   - ParEntities : TNvpList; // Parameter Entities: List of TEntityDef
343   - Notations : TNvpList; // Notations: List of TNotationDef
344   - PUBLIC
345   - CONSTRUCTOR Create;
346   - DESTRUCTOR Destroy; OVERRIDE;
347   -
348   - // --- Document Handling
349   - FUNCTION LoadFromFile (Filename : STRING;
350   - FileMode : INTEGER = fmOpenRead OR fmShareDenyNone) : BOOLEAN;
351   - // Loads Document from given file
352   - FUNCTION LoadFromBuffer (Buffer : PChar) : BOOLEAN; // Loads Document from another buffer
353   - PROCEDURE SetBuffer (Buffer : PChar); // References another buffer
354   - PROCEDURE Clear; // Clear Document
355   -
356   - PUBLIC
357   - // --- Scanning through the document
358   - CurPartType : TPartType; // Current Type
359   - CurName : STRING; // Current Name
360   - CurContent : STRING; // Current Normalized Content
361   - CurStart : PChar; // Current First character
362   - CurFinal : PChar; // Current Last character
363   - CurAttr : TAttrList; // Current Attribute List
364   - PROPERTY CurEncoding : STRING READ FCurEncoding; // Current Encoding
365   - PROCEDURE StartScan;
366   - FUNCTION Scan : BOOLEAN;
367   -
368   - // --- Events / Callbacks
369   - FUNCTION LoadExternalEntity (SystemId, PublicId,
370   - Notation : STRING) : TXmlParser; VIRTUAL;
371   - FUNCTION TranslateEncoding (CONST Source : STRING) : STRING; VIRTUAL;
372   - PROCEDURE DtdElementFound (DtdElementRec : TDtdElementRec); VIRTUAL;
373   - END;
374   -
375   - TValueType = // --- Attribute Value Type
376   - (vtNormal, // Normal specified Attribute
377   - vtImplied, // #IMPLIED attribute value
378   - vtFixed, // #FIXED attribute value
379   - vtDefault); // Attribute value from default value in !ATTLIST declaration
380   -
381   - TAttrDefault = // --- Attribute Default Type
382   - (adDefault, // Normal default value
383   - adRequired, // #REQUIRED attribute
384   - adImplied, // #IMPLIED attribute
385   - adFixed); // #FIXED attribute
386   -
387   - TAttrType = // --- Type of attribute
388   - (atUnknown, // Unknown type
389   - atCData, // Character data only
390   - atID, // ID
391   - atIdRef, // ID Reference
392   - atIdRefs, // Several ID References, separated by Whitespace
393   - atEntity, // Name of an unparsed Entity
394   - atEntities, // Several unparsed Entity names, separated by Whitespace
395   - atNmToken, // Name Token
396   - atNmTokens, // Several Name Tokens, separated by Whitespace
397   - atNotation, // A selection of Notation names (Unparsed Entity)
398   - atEnumeration); // Enumeration
399   -
400   - TElemType = // --- Element content type
401   - (etEmpty, // Element is always empty
402   - etAny, // Element can have any mixture of PCDATA and any elements
403   - etChildren, // Element must contain only elements
404   - etMixed); // Mixed PCDATA and elements
405   -
406   - (*$IFDEF HAS_CONTNRS_UNIT *)
407   - TObjectList = Contnrs.TObjectList; // Re-Export this identifier
408   - (*$ELSE *)
409   - TObjectList = CLASS (TList)
410   - DESTRUCTOR Destroy; OVERRIDE;
411   - PROCEDURE Delete (Index : INTEGER);
412   - PROCEDURE Clear; OVERRIDE;
413   - END;
414   - (*$ENDIF *)
415   -
416   - TNvpNode = CLASS // Name-Value Pair Node
417   - Name : STRING;
418   - Value : STRING;
419   - CONSTRUCTOR Create (TheName : STRING = ''; TheValue : STRING = '');
420   - END;
421   -
422   - TNvpList = CLASS (TObjectList) // Name-Value Pair List
423   - PROCEDURE Add (Node : TNvpNode);
424   - FUNCTION Node (Name : STRING) : TNvpNode; OVERLOAD;
425   - FUNCTION Node (Index : INTEGER) : TNvpNode; OVERLOAD;
426   - FUNCTION Value (Name : STRING) : STRING; OVERLOAD;
427   - FUNCTION Value (Index : INTEGER) : STRING; OVERLOAD;
428   - FUNCTION Name (Index : INTEGER) : STRING;
429   - END;
430   -
431   - TAttr = CLASS (TNvpNode) // Attribute of a Start-Tag or Empty-Element-Tag
432   - ValueType : TValueType;
433   - AttrType : TAttrType;
434   - END;
435   -
436   - TAttrList = CLASS (TNvpList) // List of Attributes
437   - PROCEDURE Analyze (Start : PChar; VAR Final : PChar);
438   - END;
439   -
440   - TEntityStack = CLASS (TObjectList) // Stack where current position is stored before parsing entities
441   - PROTECTED
442   - Owner : TXmlParser;
443   - PUBLIC
444   - CONSTRUCTOR Create (TheOwner : TXmlParser);
445   - PROCEDURE Push (LastPos : PChar); OVERLOAD;
446   - PROCEDURE Push (Instance : TObject; LastPos : PChar); OVERLOAD;
447   - FUNCTION Pop : PChar; // Returns next char or NIL if EOF is reached. Frees Instance.
448   - END;
449   -
450   - TAttrDef = CLASS (TNvpNode) // Represents a <!ATTLIST Definition. "Value" is the default value
451   - TypeDef : STRING; // Type definition from the DTD
452   - Notations : STRING; // Notation List, separated by pipe symbols '|'
453   - AttrType : TAttrType; // Attribute Type
454   - DefaultType : TAttrDefault; // Default Type
455   - END;
456   -
457   - TElemDef = CLASS (TNvpList) // Represents a <!ELEMENT Definition. Is a list of TAttrDef-Nodes
458   - Name : STRING; // Element name
459   - ElemType : TElemType; // Element type
460   - Definition : STRING; // Element definition from DTD
461   - END;
462   -
463   - TElemList = CLASS (TObjectList) // List of TElemDef nodes
464   - FUNCTION Node (Name : STRING) : TElemDef;
465   - PROCEDURE Add (Node : TElemDef);
466   - END;
467   -
468   - TEntityDef = CLASS (TNvpNode) // Represents a <!ENTITY Definition.
469   - SystemId : STRING;
470   - PublicId : STRING;
471   - NotationName : STRING;
472   - END;
473   -
474   - TNotationDef = CLASS (TNvpNode) // Represents a <!NOTATION Definition. Value is the System ID
475   - PublicId : STRING;
476   - END;
477   -
478   - TCharset = SET OF CHAR;
479   -
480   -
481   -CONST
482   - CWhitespace = [#32, #9, #13, #10]; // Whitespace characters (XmlSpec 2.3)
483   - CLetter = [#$41..#$5A, #$61..#$7A, #$C0..#$D6, #$D8..#$F6, #$F8..#$FF];
484   - CDigit = [#$30..#$39];
485   - CNameChar = CLetter + CDigit + ['.', '-', '_', ':', #$B7];
486   - CNameStart = CLetter + ['_', ':'];
487   - CQuoteChar = ['"', ''''];
488   - CPubidChar = [#32, ^M, ^J, #9, 'a'..'z', 'A'..'Z', '0'..'9',
489   - '-', '''', '(', ')', '+', ',', '.', '/', ':',
490   - '=', '?', ';', '!', '*', '#', '@', '$', '_', '%'];
491   -
492   - CDStart = '<![CDATA[';
493   - CDEnd = ']]>';
494   -
495   - // --- Name Constants for the above enumeration types
496   - CPartType_Name : ARRAY [TPartType] OF STRING =
497   - ('', 'XML Prolog', 'Comment', 'PI',
498   - 'DTD Declaration', 'Start Tag', 'Empty Tag', 'End Tag',
499   - 'Text', 'CDATA');
500   - CValueType_Name : ARRAY [TValueType] OF STRING = ('Normal', 'Implied', 'Fixed', 'Default');
501   - CAttrDefault_Name : ARRAY [TAttrDefault] OF STRING = ('Default', 'Required', 'Implied', 'Fixed');
502   - CElemType_Name : ARRAY [TElemType] OF STRING = ('Empty', 'Any', 'Childs only', 'Mixed');
503   - CAttrType_Name : ARRAY [TAttrType] OF STRING = ('Unknown', 'CDATA',
504   - 'ID', 'IDREF', 'IDREFS',
505   - 'ENTITY', 'ENTITIES',
506   - 'NMTOKEN', 'NMTOKENS',
507   - 'Notation', 'Enumeration');
508   -
509   -FUNCTION ConvertWs (Source: STRING; PackWs: BOOLEAN) : STRING; // Convert WS to spaces #x20
510   -PROCEDURE SetStringSF (VAR S : STRING; BufferStart, BufferFinal : PChar); // SetString by Start/Final of buffer
511   -FUNCTION StrSFPas (Start, Finish : PChar) : STRING; // Convert buffer part to Pascal string
512   -FUNCTION TrimWs (Source : STRING) : STRING; // Trim Whitespace
513   -
514   -FUNCTION AnsiToUtf8 (Source : ANSISTRING) : STRING; // Convert Win-1252 to UTF-8
515   -FUNCTION Utf8ToAnsi (Source : STRING; UnknownChar : CHAR = '¿') : ANSISTRING; // Convert UTF-8 to Win-1252
516   -
517   -
518   -(*
519   -===============================================================================================
520   -TCustomXmlScanner event based component wrapper for TXmlParser
521   -===============================================================================================
522   -*)
523   -
524   -TYPE
525   - TCustomXmlScanner = CLASS;
526   - TXmlPrologEvent = PROCEDURE (Sender : TObject; XmlVersion, Encoding: STRING; Standalone : BOOLEAN) OF OBJECT;
527   - TCommentEvent = PROCEDURE (Sender : TObject; Comment : STRING) OF OBJECT;
528   - TPIEvent = PROCEDURE (Sender : TObject; Target, Content: STRING; Attributes : TAttrList) OF OBJECT;
529   - TDtdEvent = PROCEDURE (Sender : TObject; RootElementName : STRING) OF OBJECT;
530   - TStartTagEvent = PROCEDURE (Sender : TObject; TagName : STRING; Attributes : TAttrList) OF OBJECT;
531   - TEndTagEvent = PROCEDURE (Sender : TObject; TagName : STRING) OF OBJECT;
532   - TContentEvent = PROCEDURE (Sender : TObject; Content : STRING) OF OBJECT;
533   - TElementEvent = PROCEDURE (Sender : TObject; ElemDef : TElemDef) OF OBJECT;
534   - TEntityEvent = PROCEDURE (Sender : TObject; EntityDef : TEntityDef) OF OBJECT;
535   - TNotationEvent = PROCEDURE (Sender : TObject; NotationDef : TNotationDef) OF OBJECT;
536   - TErrorEvent = PROCEDURE (Sender : TObject; ErrorPos : PChar) OF OBJECT;
537   - TExternalEvent = PROCEDURE (Sender : TObject; SystemId, PublicId, NotationId : STRING;
538   - VAR Result : TXmlParser) OF OBJECT;
539   - TEncodingEvent = FUNCTION (Sender : TObject; CurrentEncoding, Source : STRING) : STRING OF OBJECT;
540   -
541   -
542   - TCustomXmlScanner = CLASS (TComponent)
543   - PROTECTED
544   - FXmlParser : TXmlParser;
545   - FOnXmlProlog : TXmlPrologEvent;
546   - FOnComment : TCommentEvent;
547   - FOnPI : TPIEvent;
548   - FOnDtdRead : TDtdEvent;
549   - FOnStartTag : TStartTagEvent;
550   - FOnEmptyTag : TStartTagEvent;
551   - FOnEndTag : TEndTagEvent;
552   - FOnContent : TContentEvent;
553   - FOnCData : TContentEvent;
554   - FOnElement : TElementEvent;
555   - FOnAttList : TElementEvent;
556   - FOnEntity : TEntityEvent;
557   - FOnNotation : TNotationEvent;
558   - FOnDtdError : TErrorEvent;
559   - FOnLoadExternal : TExternalEvent;
560   - FOnTranslateEncoding : TEncodingEvent;
561   - FStopParser : BOOLEAN;
562   - FUNCTION GetNormalize : BOOLEAN;
563   - PROCEDURE SetNormalize (Value : BOOLEAN);
564   -
565   - PROCEDURE WhenXmlProlog(XmlVersion, Encoding: STRING; Standalone : BOOLEAN); VIRTUAL;
566   - PROCEDURE WhenComment (Comment : STRING); VIRTUAL;
567   - PROCEDURE WhenPI (Target, Content: STRING; Attributes : TAttrList); VIRTUAL;
568   - PROCEDURE WhenDtdRead (RootElementName : STRING); VIRTUAL;
569   - PROCEDURE WhenStartTag (TagName : STRING; Attributes : TAttrList); VIRTUAL;
570   - PROCEDURE WhenEmptyTag (TagName : STRING; Attributes : TAttrList); VIRTUAL;
571   - PROCEDURE WhenEndTag (TagName : STRING); VIRTUAL;
572   - PROCEDURE WhenContent (Content : STRING); VIRTUAL;
573   - PROCEDURE WhenCData (Content : STRING); VIRTUAL;
574   - PROCEDURE WhenElement (ElemDef : TElemDef); VIRTUAL;
575   - PROCEDURE WhenAttList (ElemDef : TElemDef); VIRTUAL;
576   - PROCEDURE WhenEntity (EntityDef : TEntityDef); VIRTUAL;
577   - PROCEDURE WhenNotation (NotationDef : TNotationDef); VIRTUAL;
578   - PROCEDURE WhenDtdError (ErrorPos : PChar); VIRTUAL;
579   -
580   - PUBLIC
581   - CONSTRUCTOR Create (AOwner: TComponent); OVERRIDE;
582   - DESTRUCTOR Destroy; OVERRIDE;
583   -
584   - PROCEDURE LoadFromFile (Filename : TFilename); // Load XML Document from file
585   - PROCEDURE LoadFromBuffer (Buffer : PChar); // Load XML Document from buffer
586   - PROCEDURE SetBuffer (Buffer : PChar); // Refer to Buffer
587   - FUNCTION GetFilename : TFilename;
588   -
589   - PROCEDURE Execute; // Perform scanning
590   -
591   - PROTECTED
592   - PROPERTY XmlParser : TXmlParser READ FXmlParser;
593   - PROPERTY StopParser : BOOLEAN READ FStopParser WRITE FStopParser;
594   - PROPERTY Filename : TFilename READ GetFilename WRITE LoadFromFile;
595   - PROPERTY Normalize : BOOLEAN READ GetNormalize WRITE SetNormalize;
596   - PROPERTY OnXmlProlog : TXmlPrologEvent READ FOnXmlProlog WRITE FOnXmlProlog;
597   - PROPERTY OnComment : TCommentEvent READ FOnComment WRITE FOnComment;
598   - PROPERTY OnPI : TPIEvent READ FOnPI WRITE FOnPI;
599   - PROPERTY OnDtdRead : TDtdEvent READ FOnDtdRead WRITE FOnDtdRead;
600   - PROPERTY OnStartTag : TStartTagEvent READ FOnStartTag WRITE FOnStartTag;
601   - PROPERTY OnEmptyTag : TStartTagEvent READ FOnEmptyTag WRITE FOnEmptyTag;
602   - PROPERTY OnEndTag : TEndTagEvent READ FOnEndTag WRITE FOnEndTag;
603   - PROPERTY OnContent : TContentEvent READ FOnContent WRITE FOnContent;
604   - PROPERTY OnCData : TContentEvent READ FOnCData WRITE FOnCData;
605   - PROPERTY OnElement : TElementEvent READ FOnElement WRITE FOnElement;
606   - PROPERTY OnAttList : TElementEvent READ FOnAttList WRITE FOnAttList;
607   - PROPERTY OnEntity : TEntityEvent READ FOnEntity WRITE FOnEntity;
608   - PROPERTY OnNotation : TNotationEvent READ FOnNotation WRITE FOnNotation;
609   - PROPERTY OnDtdError : TErrorEvent READ FOnDtdError WRITE FOnDtdError;
610   - PROPERTY OnLoadExternal : TExternalEvent READ FOnLoadExternal WRITE FOnLoadExternal;
611   - PROPERTY OnTranslateEncoding : TEncodingEvent READ FOnTranslateEncoding WRITE FOnTranslateEncoding;
612   - END;
613   -
614   -(*
615   -===============================================================================================
616   -IMPLEMENTATION
617   -===============================================================================================
618   -*)
619   -
620   -IMPLEMENTATION
621   -
622   -
623   -(*
624   -===============================================================================================
625   -Unicode and UTF-8 stuff
626   -===============================================================================================
627   -*)
628   -
629   -CONST
630   - // --- Character Translation Table for Unicode <-> Win-1252
631   - WIN1252_UNICODE : ARRAY [$00..$FF] OF WORD = (
632   - $0000, $0001, $0002, $0003, $0004, $0005, $0006, $0007, $0008, $0009,
633   - $000A, $000B, $000C, $000D, $000E, $000F, $0010, $0011, $0012, $0013,
634   - $0014, $0015, $0016, $0017, $0018, $0019, $001A, $001B, $001C, $001D,
635   - $001E, $001F, $0020, $0021, $0022, $0023, $0024, $0025, $0026, $0027,
636   - $0028, $0029, $002A, $002B, $002C, $002D, $002E, $002F, $0030, $0031,
637   - $0032, $0033, $0034, $0035, $0036, $0037, $0038, $0039, $003A, $003B,
638   - $003C, $003D, $003E, $003F, $0040, $0041, $0042, $0043, $0044, $0045,
639   - $0046, $0047, $0048, $0049, $004A, $004B, $004C, $004D, $004E, $004F,
640   - $0050, $0051, $0052, $0053, $0054, $0055, $0056, $0057, $0058, $0059,
641   - $005A, $005B, $005C, $005D, $005E, $005F, $0060, $0061, $0062, $0063,
642   - $0064, $0065, $0066, $0067, $0068, $0069, $006A, $006B, $006C, $006D,
643   - $006E, $006F, $0070, $0071, $0072, $0073, $0074, $0075, $0076, $0077,
644   - $0078, $0079, $007A, $007B, $007C, $007D, $007E, $007F,
645   -
646   - $20AC, $0081, $201A, $0192, $201E, $2026, $2020, $2021, $02C6, $2030,
647   - $0160, $2039, $0152, $008D, $017D, $008F, $0090, $2018, $2019, $201C,
648   - $201D, $2022, $2013, $2014, $02DC, $2122, $0161, $203A, $0153, $009D,
649   - $017E, $0178, $00A0, $00A1, $00A2, $00A3, $00A4, $00A5, $00A6, $00A7,
650   - $00A8, $00A9, $00AA, $00AB, $00AC, $00AD, $00AE, $00AF, $00B0, $00B1,
651   - $00B2, $00B3, $00B4, $00B5, $00B6, $00B7, $00B8, $00B9, $00BA, $00BB,
652   - $00BC, $00BD, $00BE, $00BF, $00C0, $00C1, $00C2, $00C3, $00C4, $00C5,
653   - $00C6, $00C7, $00C8, $00C9, $00CA, $00CB, $00CC, $00CD, $00CE, $00CF,
654   - $00D0, $00D1, $00D2, $00D3, $00D4, $00D5, $00D6, $00D7, $00D8, $00D9,
655   - $00DA, $00DB, $00DC, $00DD, $00DE, $00DF, $00E0, $00E1, $00E2, $00E3,
656   - $00E4, $00E5, $00E6, $00E7, $00E8, $00E9, $00EA, $00EB, $00EC, $00ED,
657   - $00EE, $00EF, $00F0, $00F1, $00F2, $00F3, $00F4, $00F5, $00F6, $00F7,
658   - $00F8, $00F9, $00FA, $00FB, $00FC, $00FD, $00FE, $00FF);
659   -
660   -(* UTF-8 (somewhat simplified)
661   - -----
662   - Character Range Byte sequence
663   - --------------- -------------------------- (x=Bits from original character)
664   - $0000..$007F 0xxxxxxx
665   - $0080..$07FF 110xxxxx 10xxxxxx
666   - $8000..$FFFF 1110xxxx 10xxxxxx 10xxxxxx
667   -
668   - Example
669   - --------
670   - Transforming the Unicode character U+00E4 LATIN SMALL LETTER A WITH DIAERESIS ("ä"):
671   -
672   - ISO-8859-1, Decimal 228
673   - Win1252, Hex $E4
674   - ANSI Bin 1110 0100
675   - abcd efgh
676   -
677   - UTF-8 Binary 1100xxab 10cdefgh
678   - Binary 11000011 10100100
679   - Hex $C3 $A4
680   - Decimal 195 164
681   - ANSI Ã ¤ *)
682   -
683   -
684   -FUNCTION AnsiToUtf8 (Source : ANSISTRING) : STRING;
685   - (* Converts the given Windows ANSI (Win1252) String to UTF-8. *)
686   -VAR
687   - I : INTEGER; // Loop counter
688   - U : WORD; // Current Unicode value
689   - Len : INTEGER; // Current real length of "Result" string
690   -BEGIN
691   - SetLength (Result, Length (Source) * 3); // Worst case
692   - Len := 0;
693   - FOR I := 1 TO Length (Source) DO BEGIN
694   - U := WIN1252_UNICODE [ORD (Source [I])];
695   - CASE U OF
696   - $0000..$007F : BEGIN
697   - INC (Len);
698   - Result [Len] := CHR (U);
699   - END;
700   - $0080..$07FF : BEGIN
701   - INC (Len);
702   - Result [Len] := CHR ($C0 OR (U SHR 6));
703   - INC (Len);
704   - Result [Len] := CHR ($80 OR (U AND $3F));
705   - END;
706   - $0800..$FFFF : BEGIN
707   - INC (Len);
708   - Result [Len] := CHR ($E0 OR (U SHR 12));
709   - INC (Len);
710   - Result [Len] := CHR ($80 OR ((U SHR 6) AND $3F));
711   - INC (Len);
712   - Result [Len] := CHR ($80 OR (U AND $3F));
713   - END;
714   - END;
715   - END;
716   - SetLength (Result, Len);
717   -END;
718   -
719   -
720   -FUNCTION Utf8ToAnsi (Source : STRING; UnknownChar : CHAR = '¿') : ANSISTRING;
721   - (* Converts the given UTF-8 String to Windows ANSI (Win-1252).
722   - If a character can not be converted, the "UnknownChar" is inserted. *)
723   -VAR
724   - SourceLen : INTEGER; // Length of Source string
725   - I, K : INTEGER;
726   - A : BYTE; // Current ANSI character value
727   - U : WORD;
728   - Ch : CHAR; // Dest char
729   - Len : INTEGER; // Current real length of "Result" string
730   -BEGIN
731   - SourceLen := Length (Source);
732   - SetLength (Result, SourceLen); // Enough room to live
733   - Len := 0;
734   - I := 1;
735   - WHILE I <= SourceLen DO BEGIN
736   - A := ORD (Source [I]);
737   - IF A < $80 THEN BEGIN // Range $0000..$007F
738   - INC (Len);
739   - Result [Len] := Source [I];
740   - INC (I);
741   - END
742   - ELSE BEGIN // Determine U, Inc I
743   - IF (A AND $E0 = $C0) AND (I < SourceLen) THEN BEGIN // Range $0080..$07FF
744   - U := (WORD (A AND $1F) SHL 6) OR (ORD (Source [I+1]) AND $3F);
745   - INC (I, 2);
746   - END
747   - ELSE IF (A AND $F0 = $E0) AND (I < SourceLen-1) THEN BEGIN // Range $0800..$FFFF
748   - U := (WORD (A AND $0F) SHL 12) OR
749   - (WORD (ORD (Source [I+1]) AND $3F) SHL 6) OR
750   - ( ORD (Source [I+2]) AND $3F);
751   - INC (I, 3);
752   - END
753   - ELSE BEGIN // Unknown/unsupported
754   - INC (I);
755   - FOR K := 7 DOWNTO 0 DO
756   - IF A AND (1 SHL K) = 0 THEN BEGIN
757   - INC (I, (A SHR (K+1))-1);
758   - BREAK;
759   - END;
760   - U := WIN1252_UNICODE [ORD (UnknownChar)];
761   - END;
762   - Ch := UnknownChar; // Retrieve ANSI char
763   - FOR A := $00 TO $FF DO
764   - IF WIN1252_UNICODE [A] = U THEN BEGIN
765   - Ch := CHR (A);
766   - BREAK;
767   - END;
768   - INC (Len);
769   - Result [Len] := Ch;
770   - END;
771   - END;
772   - SetLength (Result, Len);
773   -END;
774   -
775   -
776   -(*
777   -===============================================================================================
778   -"Special" Helper Functions
779   -
780   -Don't ask me why. But including these functions makes the parser *DRAMATICALLY* faster
781   -on my K6-233 machine. You can test it yourself just by commenting them out.
782   -They do exactly the same as the Assembler routines defined in SysUtils.
783   -(This is where you can see how great the Delphi compiler really is. The compiled code is
784   -faster than hand-coded assembler!)
785   -===============================================================================================
786   ---> Just move this line below the StrScan function --> *)
787   -
788   -
789   -FUNCTION StrPos (CONST Str, SearchStr : PChar) : PChar;
790   - // Same functionality as SysUtils.StrPos
791   -VAR
792   - First : CHAR;
793   - Len : INTEGER;
794   -BEGIN
795   - First := SearchStr^;
796   - Len := StrLen (SearchStr);
797   - Result := Str;
798   - REPEAT
799   - IF Result^ = First THEN
800   - IF StrLComp (Result, SearchStr, Len) = 0 THEN BREAK;
801   - IF Result^ = #0 THEN BEGIN
802   - Result := NIL;
803   - BREAK;
804   - END;
805   - INC (Result);
806   - UNTIL FALSE;
807   -END;
808   -
809   -
810   -FUNCTION StrScan (CONST Start : PChar; CONST Ch : CHAR) : PChar;
811   - // Same functionality as SysUtils.StrScan
812   -BEGIN
813   - Result := Start;
814   - WHILE Result^ <> Ch DO BEGIN
815   - IF Result^ = #0 THEN BEGIN
816   - Result := NIL;
817   - EXIT;
818   - END;
819   - INC (Result);
820   - END;
821   -END;
822   -
823   -
824   -(*
825   -===============================================================================================
826   -Helper Functions
827   -===============================================================================================
828   -*)
829   -
830   -FUNCTION DelChars (Source : STRING; CharsToDelete : TCharset) : STRING;
831   - // Delete all "CharsToDelete" from the string
832   -VAR
833   - I : INTEGER;
834   -BEGIN
835   - Result := Source;
836   - FOR I := Length (Result) DOWNTO 1 DO
837   - IF Result [I] IN CharsToDelete THEN
838   - Delete (Result, I, 1);
839   -END;
840   -
841   -
842   -FUNCTION TrimWs (Source : STRING) : STRING;
843   - // Trimms off Whitespace characters from both ends of the string
844   -VAR
845   - I : INTEGER;
846   -BEGIN
847   - // --- Trim Left
848   - I := 1;
849   - WHILE (I <= Length (Source)) AND (Source [I] IN CWhitespace) DO
850   - INC (I);
851   - Result := Copy (Source, I, MaxInt);
852   -
853   - // --- Trim Right
854   - I := Length (Result);
855   - WHILE (I > 1) AND (Result [I] IN CWhitespace) DO
856   - DEC (I);
857   - Delete (Result, I+1, Length (Result)-I);
858   -END;
859   -
860   -
861   -FUNCTION ConvertWs (Source: STRING; PackWs: BOOLEAN) : STRING;
862   - // Converts all Whitespace characters to the Space #x20 character
863   - // If "PackWs" is true, contiguous Whitespace characters are packed to one
864   -VAR
865   - I : INTEGER;
866   -BEGIN
867   - Result := Source;
868   - FOR I := Length (Result) DOWNTO 1 DO
869   - IF (Result [I] IN CWhitespace) THEN
870   - IF PackWs AND (I > 1) AND (Result [I-1] IN CWhitespace)
871   - THEN Delete (Result, I, 1)
872   - ELSE Result [I] := #32;
873   -END;
874   -
875   -
876   -PROCEDURE SetStringSF (VAR S : STRING; BufferStart, BufferFinal : PChar);
877   -BEGIN
878   - SetString (S, BufferStart, BufferFinal-BufferStart+1);
879   -END;
880   -
881   -
882   -FUNCTION StrLPas (Start : PChar; Len : INTEGER) : STRING;
883   -BEGIN
884   - SetString (Result, Start, Len);
885   -END;
886   -
887   -
888   -FUNCTION StrSFPas (Start, Finish : PChar) : STRING;
889   -BEGIN
890   - SetString (Result, Start, Finish-Start+1);
891   -END;
892   -
893   -
894   -FUNCTION StrScanE (CONST Source : PChar; CONST CharToScanFor : CHAR) : PChar;
895   - // If "CharToScanFor" is not found, StrScanE returns the last char of the
896   - // buffer instead of NIL
897   -BEGIN
898   - Result := StrScan (Source, CharToScanFor);
899   - IF Result = NIL THEN
900   - Result := StrEnd (Source)-1;
901   -END;
902   -
903   -
904   -PROCEDURE ExtractName (Start : PChar; Terminators : TCharset; VAR Final : PChar);
905   - (* Extracts the complete Name beginning at "Start".
906   - It is assumed that the name is contained in Markup, so the '>' character is
907   - always a Termination.
908   - Start: IN Pointer to first char of name. Is always considered to be valid
909   - Terminators: IN Characters which terminate the name
910   - Final: OUT Pointer to last char of name *)
911   -BEGIN
912   - Final := Start+1;
913   - Include (Terminators, #0);
914   - Include (Terminators, '>');
915   - WHILE NOT (Final^ IN Terminators) DO
916   - INC (Final);
917   - DEC (Final);
918   -END;
919   -
920   -
921   -PROCEDURE ExtractQuote (Start : PChar; VAR Content : STRING; VAR Final : PChar);
922   - (* Extract a string which is contained in single or double Quotes.
923   - Start: IN Pointer to opening quote
924   - Content: OUT The quoted string
925   - Final: OUT Pointer to closing quote *)
926   -BEGIN
927   - Final := StrScan (Start+1, Start^);
928   - IF Final = NIL THEN BEGIN
929   - Final := StrEnd (Start+1)-1;
930   - SetString (Content, Start+1, Final-Start);
931   - END
932   - ELSE
933   - SetString (Content, Start+1, Final-1-Start);
934   -END;
935   -
936   -
937   -(*
938   -===============================================================================================
939   -TEntityStackNode
940   -This Node is pushed to the "Entity Stack" whenever the parser parses entity replacement text.
941   -The "Instance" field holds the Instance pointer of an External Entity buffer. When it is
942   -popped, the Instance is freed.
943   -The "Encoding" field holds the name of the Encoding. External Parsed Entities may have
944   -another encoding as the document entity (XmlSpec 4.3.3). So when there is an "<?xml" PI
945   -found in the stream (= Text Declaration at the beginning of external parsed entities), the
946   -Encoding found there is used for the External Entity (is assigned to TXmlParser.CurEncoding)
947   -Default Encoding is for the Document Entity is UTF-8. It is assumed that External Entities
948   -have the same Encoding as the Document Entity, unless they carry a Text Declaration.
949   -===============================================================================================
950   -*)
951   -
952   -TYPE
953   - TEntityStackNode = CLASS
954   - Instance : TObject;
955   - Encoding : STRING;
956   - LastPos : PChar;
957   - END;
958   -
959   -(*
960   -===============================================================================================
961   -TEntityStack
962   -For nesting of Entities.
963   -When there is an entity reference found in the data stream, the corresponding entity
964   -definition is searched and the current position is pushed to this stack.
965   -From then on, the program scans the entitiy replacement text as if it were normal content.
966   -When the parser reaches the end of an entity, the current position is popped off the
967   -stack again.
968   -===============================================================================================
969   -*)
970   -
971   -CONSTRUCTOR TEntityStack.Create (TheOwner : TXmlParser);
972   -BEGIN
973   - INHERITED Create;
974   - Owner := TheOwner;
975   -END;
976   -
977   -
978   -PROCEDURE TEntityStack.Push (LastPos : PChar);
979   -BEGIN
980   - Push (NIL, LastPos);
981   -END;
982   -
983   -
984   -PROCEDURE TEntityStack.Push (Instance : TObject; LastPos : PChar);
985   -VAR
986   - ESN : TEntityStackNode;
987   -BEGIN
988   - ESN := TEntityStackNode.Create;
989   - ESN.Instance := Instance;
990   - ESN.Encoding := Owner.FCurEncoding; // Save current Encoding
991   - ESN.LastPos := LastPos;
992   - Add (ESN);
993   -END;
994   -
995   -
996   -FUNCTION TEntityStack.Pop : PChar;
997   -VAR
998   - ESN : TEntityStackNode;
999   -BEGIN
1000   - IF Count > 0 THEN BEGIN
1001   - ESN := TEntityStackNode (Items [Count-1]);
1002   - Result := ESN.LastPos;
1003   - IF ESN.Instance <> NIL THEN
1004   - ESN.Instance.Free;
1005   - IF ESN.Encoding <> '' THEN
1006   - Owner.FCurEncoding := ESN.Encoding; // Restore current Encoding
1007   - Delete (Count-1);
1008   - END
1009   - ELSE
1010   - Result := NIL;
1011   -END;
1012   -
1013   -
1014   -(*
1015   -===============================================================================================
1016   -TExternalID
1017   ------------
1018   -XmlSpec 4.2.2: ExternalID ::= 'SYSTEM' S SystemLiteral |
1019   - 'PUBLIC' S PubidLiteral S SystemLiteral
1020   -XmlSpec 4.7: PublicID ::= 'PUBLIC' S PubidLiteral
1021   -SystemLiteral and PubidLiteral are quoted
1022   -===============================================================================================
1023   -*)
1024   -
1025   -TYPE
1026   - TExternalID = CLASS
1027   - PublicId : STRING;
1028   - SystemId : STRING;
1029   - Final : PChar;
1030   - CONSTRUCTOR Create (Start : PChar);
1031   - END;
1032   -
1033   -CONSTRUCTOR TExternalID.Create (Start : PChar);
1034   -BEGIN
1035   - INHERITED Create;
1036   - Final := Start;
1037   - IF StrLComp (Start, 'SYSTEM', 6) = 0 THEN BEGIN
1038   - WHILE NOT (Final^ IN (CQuoteChar + [#0, '>', '['])) DO INC (Final);
1039   - IF NOT (Final^ IN CQuoteChar) THEN EXIT;
1040   - ExtractQuote (Final, SystemID, Final);
1041   - END
1042   - ELSE IF StrLComp (Start, 'PUBLIC', 6) = 0 THEN BEGIN
1043   - WHILE NOT (Final^ IN (CQuoteChar + [#0, '>', '['])) DO INC (Final);
1044   - IF NOT (Final^ IN CQuoteChar) THEN EXIT;
1045   - ExtractQuote (Final, PublicID, Final);
1046   - INC (Final);
1047   - WHILE NOT (Final^ IN (CQuoteChar + [#0, '>', '['])) DO INC (Final);
1048   - IF NOT (Final^ IN CQuoteChar) THEN EXIT;
1049   - ExtractQuote (Final, SystemID, Final);
1050   - END;
1051   -END;
1052   -
1053   -
1054   -(*
1055   -===============================================================================================
1056   -TXmlParser
1057   -===============================================================================================
1058   -*)
1059   -
1060   -CONSTRUCTOR TXmlParser.Create;
1061   -BEGIN
1062   - INHERITED Create;
1063   - FBuffer := NIL;
1064   - FBufferSize := 0;
1065   - Elements := TElemList.Create;
1066   - Entities := TNvpList.Create;
1067   - ParEntities := TNvpList.Create;
1068   - Notations := TNvpList.Create;
1069   - CurAttr := TAttrList.Create;
1070   - EntityStack := TEntityStack.Create (Self);
1071   - Clear;
1072   -END;
1073   -
1074   -
1075   -DESTRUCTOR TXmlParser.Destroy;
1076   -BEGIN
1077   - Clear;
1078   - Elements.Free;
1079   - Entities.Free;
1080   - ParEntities.Free;
1081   - Notations.Free;
1082   - CurAttr.Free;
1083   - EntityStack.Free;
1084   - INHERITED Destroy;
1085   -END;
1086   -
1087   -
1088   -PROCEDURE TXmlParser.Clear;
1089   - // Free Buffer and clear all object attributes
1090   -BEGIN
1091   - IF (FBufferSize > 0) AND (FBuffer <> NIL) THEN
1092   - FreeMem (FBuffer);
1093   - FBuffer := NIL;
1094   - FBufferSize := 0;
1095   - FSource := '';
1096   - FXmlVersion := '';
1097   - FEncoding := '';
1098   - FStandalone := FALSE;
1099   - FRootName := '';
1100   - FDtdcFinal := NIL;
1101   - FNormalize := TRUE;
1102   - Elements.Clear;
1103   - Entities.Clear;
1104   - ParEntities.Clear;
1105   - Notations.Clear;
1106   - CurAttr.Clear;
1107   - EntityStack.Clear;
1108   -END;
1109   -
1110   -
1111   -FUNCTION TXmlParser.LoadFromFile (Filename : STRING; FileMode : INTEGER = fmOpenRead OR fmShareDenyNone) : BOOLEAN;
1112   - // Loads Document from given file
1113   - // Returns TRUE if successful
1114   -VAR
1115   - f : FILE;
1116   - ReadIn : INTEGER;
1117   - OldFileMode : INTEGER;
1118   -BEGIN
1119   - Result := FALSE;
1120   - Clear;
1121   -
1122   - // --- Open File
1123   - OldFileMode := SYSTEM.FileMode;
1124   - TRY
1125   - SYSTEM.FileMode := FileMode;
1126   - TRY
1127   - AssignFile (f, Filename);
1128   - Reset (f, 1);
1129   - EXCEPT
1130   - EXIT;
1131   - END;
1132   -
1133   - TRY
1134   - // --- Allocate Memory
1135   - TRY
1136   - FBufferSize := Filesize (f) + 1;
1137   - GetMem (FBuffer, FBufferSize);
1138   - EXCEPT
1139   - Clear;
1140   - EXIT;
1141   - END;
1142   -
1143   - // --- Read File
1144   - TRY
1145   - BlockRead (f, FBuffer^, FBufferSize, ReadIn);
1146   - (FBuffer+ReadIn)^ := #0; // NULL termination
1147   - EXCEPT
1148   - Clear;
1149   - EXIT;
1150   - END;
1151   - FINALLY
1152   - CloseFile (f);
1153   - END;
1154   -
1155   - FSource := Filename;
1156   - Result := TRUE;
1157   -
1158   - FINALLY
1159   - SYSTEM.FileMode := OldFileMode;
1160   - END;
1161   -END;
1162   -
1163   -
1164   -FUNCTION TXmlParser.LoadFromBuffer (Buffer : PChar) : BOOLEAN;
1165   - // Loads Document from another buffer
1166   - // Returns TRUE if successful
1167   - // The "Source" property becomes '<MEM>' if successful
1168   -BEGIN
1169   - Result := FALSE;
1170   - Clear;
1171   - FBufferSize := StrLen (Buffer) + 1;
1172   - TRY
1173   - GetMem (FBuffer, FBufferSize);
1174   - EXCEPT
1175   - Clear;
1176   - EXIT;
1177   - END;
1178   - StrCopy (FBuffer, Buffer);
1179   - FSource := '<MEM>';
1180   - Result := TRUE;
1181   -END;
1182   -
1183   -
1184   -PROCEDURE TXmlParser.SetBuffer (Buffer : PChar); // References another buffer
1185   -BEGIN
1186   - Clear;
1187   - FBuffer := Buffer;
1188   - FBufferSize := 0;
1189   - FSource := '<REFERENCE>';
1190   -END;
1191   -
1192   -
1193   -//-----------------------------------------------------------------------------------------------
1194   -// Scanning through the document
1195   -//-----------------------------------------------------------------------------------------------
1196   -
1197   -PROCEDURE TXmlParser.StartScan;
1198   -BEGIN
1199   - CurPartType := ptNone;
1200   - CurName := '';
1201   - CurContent := '';
1202   - CurStart := NIL;
1203   - CurFinal := NIL;
1204   - CurAttr.Clear;
1205   - EntityStack.Clear;
1206   -END;
1207   -
1208   -
1209   -FUNCTION TXmlParser.Scan : BOOLEAN;
1210   - // Scans the next Part
1211   - // Returns TRUE if a part could be found, FALSE if there is no part any more
1212   - //
1213   - // "IsDone" can be set to FALSE by AnalyzeText in order to go to the next part
1214   - // if there is no Content due to normalization
1215   -VAR
1216   - IsDone : BOOLEAN;
1217   -BEGIN
1218   - REPEAT
1219   - IsDone := TRUE;
1220   -
1221   - // --- Start of next Part
1222   - IF CurStart = NIL
1223   - THEN CurStart := DocBuffer
1224   - ELSE CurStart := CurFinal+1;
1225   - CurFinal := CurStart;
1226   -
1227   - // --- End of Document of Pop off a new part from the Entity stack?
1228   - IF CurStart^ = #0 THEN
1229   - CurStart := EntityStack.Pop;
1230   -
1231   - // --- No Document or End Of Document: Terminate Scan
1232   - IF (CurStart = NIL) OR (CurStart^ = #0) THEN BEGIN
1233   - CurStart := StrEnd (DocBuffer);
1234   - CurFinal := CurStart-1;
1235   - EntityStack.Clear;
1236   - Result := FALSE;
1237   - EXIT;
1238   - END;
1239   -
1240   - IF (StrLComp (CurStart, '<?xml', 5) = 0) AND
1241   - ((CurStart+5)^ IN CWhitespace) THEN AnalyzeProlog // XML Declaration, Text Declaration
1242   - ELSE IF StrLComp (CurStart, '<?', 2) = 0 THEN AnalyzePI (CurStart, CurFinal) // PI
1243   - ELSE IF StrLComp (CurStart, '<!--', 4) = 0 THEN AnalyzeComment (CurStart, CurFinal) // Comment
1244   - ELSE IF StrLComp (CurStart, '<!DOCTYPE', 9) = 0 THEN AnalyzeDtdc // DTDc
1245   - ELSE IF StrLComp (CurStart, CDStart, Length (CDStart)) = 0 THEN AnalyzeCdata // CDATA Section
1246   - ELSE IF StrLComp (CurStart, '<', 1) = 0 THEN AnalyzeTag // Start-Tag, End-Tag, Empty-Element-Tag
1247   - ELSE AnalyzeText (IsDone); // Text Content
1248   - UNTIL IsDone;
1249   - Result := TRUE;
1250   -END;
1251   -
1252   -
1253   -PROCEDURE TXmlParser.AnalyzeProlog;
1254   - // Analyze XML Prolog or Text Declaration
1255   -VAR
1256   - F : PChar;
1257   -BEGIN
1258   - CurAttr.Analyze (CurStart+5, F);
1259   - IF EntityStack.Count = 0 THEN BEGIN
1260   - FXmlVersion := CurAttr.Value ('version');
1261   - FEncoding := CurAttr.Value ('encoding');
1262   - FStandalone := CurAttr.Value ('standalone') = 'yes';
1263   - END;
1264   - CurFinal := StrPos (F, '?>');
1265   - IF CurFinal <> NIL
1266   - THEN INC (CurFinal)
1267   - ELSE CurFinal := StrEnd (CurStart)-1;
1268   - FCurEncoding := AnsiUpperCase (CurAttr.Value ('encoding'));
1269   - IF FCurEncoding = '' THEN
1270   - FCurEncoding := 'UTF-8'; // Default XML Encoding is UTF-8
1271   - CurPartType := ptXmlProlog;
1272   - CurName := '';
1273   - CurContent := '';
1274   -END;
1275   -
1276   -
1277   -PROCEDURE TXmlParser.AnalyzeComment (Start : PChar; VAR Final : PChar);
1278   - // Analyze Comments
1279   -BEGIN
1280   - Final := StrPos (Start+4, '-->');
1281   - IF Final = NIL
1282   - THEN Final := StrEnd (Start)-1
1283   - ELSE INC (Final, 2);
1284   - CurPartType := ptComment;
1285   -END;
1286   -
1287   -
1288   -PROCEDURE TXmlParser.AnalyzePI (Start : PChar; VAR Final : PChar);
1289   - // Analyze Processing Instructions (PI)
1290   - // This is also called for Character
1291   -VAR
1292   - F : PChar;
1293   -BEGIN
1294   - CurPartType := ptPI;
1295   - Final := StrPos (Start+2, '?>');
1296   - IF Final = NIL
1297   - THEN Final := StrEnd (Start)-1
1298   - ELSE INC (Final);
1299   - ExtractName (Start+2, CWhitespace + ['?', '>'], F);
1300   - SetStringSF (CurName, Start+2, F);
1301   - SetStringSF (CurContent, F+1, Final-2);
1302   - CurAttr.Analyze (F+1, F);
1303   -END;
1304   -
1305   -
1306   -PROCEDURE TXmlParser.AnalyzeDtdc;
1307   - (* Analyze Document Type Declaration
1308   - doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl | PEReference | S)* ']' S?)? '>'
1309   - markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment
1310   - PEReference ::= '%' Name ';'
1311   -
1312   - elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'
1313   - AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'
1314   - EntityDecl ::= '<!ENTITY' S Name S EntityDef S? '>' |
1315   - '<!ENTITY' S '%' S Name S PEDef S? '>'
1316   - NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S? '>'
1317   - PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char* )))? '?>'
1318   - Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->' *)
1319   -TYPE
1320   - TPhase = (phName, phDtd, phInternal, phFinishing);
1321   -VAR
1322   - Phase : TPhase;
1323   - F : PChar;
1324   - ExternalID : TExternalID;
1325   - ExternalDTD : TXmlParser;
1326   - DER : TDtdElementRec;
1327   -BEGIN
1328   - DER.Start := CurStart;
1329   - EntityStack.Clear; // Clear stack for Parameter Entities
1330   - CurPartType := ptDtdc;
1331   -
1332   - // --- Don't read DTDc twice
1333   - IF FDtdcFinal <> NIL THEN BEGIN
1334   - CurFinal := FDtdcFinal;
1335   - EXIT;
1336   - END;
1337   -
1338   - // --- Scan DTDc
1339   - CurFinal := CurStart + 9; // First char after '<!DOCTYPE'
1340   - Phase := phName;
1341   - REPEAT
1342   - CASE CurFinal^ OF
1343   - '%' : BEGIN
1344   - PushPE (CurFinal);
1345   - CONTINUE;
1346   - END;
1347   - #0 : IF EntityStack.Count = 0 THEN
1348   - BREAK
1349   - ELSE BEGIN
1350   - CurFinal := EntityStack.Pop;
1351   - CONTINUE;
1352   - END;
1353   - '[' : BEGIN
1354   - Phase := phInternal;
1355   - AnalyzeDtdElements (CurFinal+1, CurFinal);
1356   - CONTINUE;
1357   - END;
1358   - ']' : Phase := phFinishing;
1359   - '>' : BREAK;
1360   - ELSE IF NOT (CurFinal^ IN CWhitespace) THEN BEGIN
1361   - CASE Phase OF
1362   - phName : IF (CurFinal^ IN CNameStart) THEN BEGIN
1363   - ExtractName (CurFinal, CWhitespace + ['[', '>'], F);
1364   - SetStringSF (FRootName, CurFinal, F);
1365   - CurFinal := F;
1366   - Phase := phDtd;
1367   - END;
1368   - phDtd : IF (StrLComp (CurFinal, 'SYSTEM', 6) = 0) OR
1369   - (StrLComp (CurFinal, 'PUBLIC', 6) = 0) THEN BEGIN
1370   - ExternalID := TExternalID.Create (CurFinal);
1371   - ExternalDTD := LoadExternalEntity (ExternalId.SystemId, ExternalID.PublicId, '');
1372   - F := StrPos (ExternalDtd.DocBuffer, '<!');
1373   - IF F <> NIL THEN
1374   - AnalyzeDtdElements (F, F);
1375   - ExternalDTD.Free;
1376   - CurFinal := ExternalID.Final;
1377   - ExternalID.Free;
1378   - END;
1379   - ELSE BEGIN
1380   - DER.ElementType := deError;
1381   - DER.Pos := CurFinal;
1382   - DER.Final := CurFinal;
1383   - DtdElementFound (DER);
1384   - END;
1385   - END;
1386   -
1387   - END;
1388   - END;
1389   - INC (CurFinal);
1390   - UNTIL FALSE;
1391   -
1392   - CurPartType := ptDtdc;
1393   - CurName := '';
1394   - CurContent := '';
1395   -
1396   - // It is an error in the document if "EntityStack" is not empty now
1397   - IF EntityStack.Count > 0 THEN BEGIN
1398   - DER.ElementType := deError;
1399   - DER.Final := CurFinal;
1400   - DER.Pos := CurFinal;
1401   - DtdElementFound (DER);
1402   - END;
1403   -
1404   - EntityStack.Clear; // Clear stack for General Entities
1405   - FDtdcFinal := CurFinal;
1406   -END;
1407   -
1408   -
1409   -PROCEDURE TXmlParser.AnalyzeDtdElements (Start : PChar; VAR Final : PChar);
1410   - // Analyze the "Elements" of a DTD contained in the external or
1411   - // internal DTD subset.
1412   -VAR
1413   - DER : TDtdElementRec;
1414   -BEGIN
1415   - Final := Start;
1416   - REPEAT
1417   - CASE Final^ OF
1418   - '%' : BEGIN
1419   - PushPE (Final);
1420   - CONTINUE;
1421   - END;
1422   - #0 : IF EntityStack.Count = 0 THEN
1423   - BREAK
1424   - ELSE BEGIN
1425   - CurFinal := EntityStack.Pop;
1426   - CONTINUE;
1427   - END;
1428   - ']',
1429   - '>' : BREAK;
1430   - '<' : IF StrLComp (Final, '<!ELEMENT', 9) = 0 THEN AnalyzeElementDecl (Final, Final)
1431   - ELSE IF StrLComp (Final, '<!ATTLIST', 9) = 0 THEN AnalyzeAttListDecl (Final, Final)
1432   - ELSE IF StrLComp (Final, '<!ENTITY', 8) = 0 THEN AnalyzeEntityDecl (Final, Final)
1433   - ELSE IF StrLComp (Final, '<!NOTATION', 10) = 0 THEN AnalyzeNotationDecl (Final, Final)
1434   - ELSE IF StrLComp (Final, '<?', 2) = 0 THEN BEGIN // PI in DTD
1435   - DER.ElementType := dePI;
1436   - DER.Start := Final;
1437   - AnalyzePI (Final, Final);
1438   - DER.Target := PChar (CurName);
1439   - DER.Content := PChar (CurContent);
1440   - DER.AttrList := CurAttr;
1441   - DER.Final := Final;
1442   - DtdElementFound (DER);
1443   - END
1444   - ELSE IF StrLComp (Final, '<!--', 4) = 0 THEN BEGIN // Comment in DTD
1445   - DER.ElementType := deComment;
1446   - DER.Start := Final;
1447   - AnalyzeComment (Final, Final);
1448   - DER.Final := Final;
1449   - DtdElementFound (DER);
1450   - END
1451   - ELSE BEGIN
1452   - DER.ElementType := deError;
1453   - DER.Start := Final;
1454   - DER.Pos := Final;
1455   - DER.Final := Final;
1456   - DtdElementFound (DER);
1457   - END;
1458   -
1459   - END;
1460   - INC (Final);
1461   - UNTIL FALSE;
1462   -END;
1463   -
1464   -
1465   -PROCEDURE TXmlParser.AnalyzeTag;
1466   - // Analyze Tags
1467   -VAR
1468   - S, F : PChar;
1469   - Attr : TAttr;
1470   - ElemDef : TElemDef;
1471   - AttrDef : TAttrDef;
1472   - I : INTEGER;
1473   -BEGIN
1474   - CurPartType := ptStartTag;
1475   - S := CurStart+1;
1476   - IF S^ = '/' THEN BEGIN
1477   - CurPartType := ptEndTag;
1478   - INC (S);
1479   - END;
1480   - ExtractName (S, CWhitespace + ['/'], F);
1481   - SetStringSF (CurName, S, F);
1482   - CurAttr.Analyze (F+1, CurFinal);
1483   - IF CurFinal^ = '/' THEN BEGIN
1484   - CurPartType := ptEmptyTag;
1485   - END;
1486   - CurFinal := StrScanE (CurFinal, '>');
1487   -
1488   - // --- Set Default Attribute values for nonexistent attributes
1489   - IF (CurPartType = ptStartTag) OR (CurPartType = ptEmptyTag) THEN BEGIN
1490   - ElemDef := Elements.Node (CurName);
1491   - IF ElemDef <> NIL THEN BEGIN
1492   - FOR I := 0 TO ElemDef.Count-1 DO BEGIN
1493   - AttrDef := TAttrDef (ElemDef [I]);
1494   - Attr := TAttr (CurAttr.Node (AttrDef.Name));
1495   - IF (Attr = NIL) AND (AttrDef.Value <> '') THEN BEGIN
1496   - Attr := TAttr.Create (AttrDef.Name, AttrDef.Value);
1497   - Attr.ValueType := vtDefault;
1498   - CurAttr.Add (Attr);
1499   - END;
1500   - IF Attr <> NIL THEN BEGIN
1501   - CASE AttrDef.DefaultType OF
1502   - adDefault : ;
1503   - adRequired : ; // -!- It is an error in the document if "Attr.Value" is an empty string
1504   - adImplied : Attr.ValueType := vtImplied;
1505   - adFixed : BEGIN
1506   - Attr.ValueType := vtFixed;
1507   - Attr.Value := AttrDef.Value;
1508   - END;
1509   - END;
1510   - Attr.AttrType := AttrDef.AttrType;
1511   - END;
1512   - END;
1513   - END;
1514   -
1515   - // --- Normalize Attribute Values. XmlSpec:
1516   - // - a character reference is processed by appending the referenced character to the attribute value
1517   - // - an entity reference is processed by recursively processing the replacement text of the entity
1518   - // - a whitespace character (#x20, #xD, #xA, #x9) is processed by appending #x20 to the normalized value,
1519   - // except that only a single #x20 is appended for a "#xD#xA" sequence that is part of an external
1520   - // parsed entity or the literal entity value of an internal parsed entity
1521   - // - other characters are processed by appending them to the normalized value
1522   - // If the declared value is not CDATA, then the XML processor must further process the
1523   - // normalized attribute value by discarding any leading and trailing space (#x20) characters,
1524   - // and by replacing sequences of space (#x20) characters by a single space (#x20) character.
1525   - // All attributes for which no declaration has been read should be treated by a
1526   - // non-validating parser as if declared CDATA.
1527   - // !!! The XML 1.0 SE specification is somewhat different here
1528   - // This code does not conform exactly to this specification
1529   - FOR I := 0 TO CurAttr.Count-1 DO
1530   - WITH TAttr (CurAttr [I]) DO BEGIN
1531   - ReplaceGeneralEntities (Value);
1532   - ReplaceCharacterEntities (Value);
1533   - IF (AttrType <> atCData) AND (AttrType <> atUnknown)
1534   - THEN Value := TranslateEncoding (TrimWs (ConvertWs (Value, TRUE)))
1535   - ELSE Value := TranslateEncoding (ConvertWs (Value, FALSE));
1536   - END;
1537   - END;
1538   -END;
1539   -
1540   -
1541   -PROCEDURE TXmlParser.AnalyzeCData;
1542   - // Analyze CDATA Sections
1543   -BEGIN
1544   - CurPartType := ptCData;
1545   - CurFinal := StrPos (CurStart, CDEnd);
1546   - IF CurFinal = NIL THEN BEGIN
1547   - CurFinal := StrEnd (CurStart)-1;
1548   - CurContent := TranslateEncoding (StrPas (CurStart+Length (CDStart)));
1549   - END
1550   - ELSE BEGIN
1551   - SetStringSF (CurContent, CurStart+Length (CDStart), CurFinal-1);
1552   - INC (CurFinal, Length (CDEnd)-1);
1553   - CurContent := TranslateEncoding (CurContent);
1554   - END;
1555   -END;
1556   -
1557   -
1558   -PROCEDURE TXmlParser.AnalyzeText (VAR IsDone : BOOLEAN);
1559   - (* Analyzes Text Content between Tags. CurFinal will point to the last content character.
1560   - Content ends at a '<' character or at the end of the document.
1561   - Entity References and Character Entity references are resolved.
1562   - If PackSpaces is TRUE, contiguous Whitespace Characters will be compressed to
1563   - one Space #x20 character, Whitespace at the beginning and end of content will
1564   - be trimmed off and content which is or becomes empty is not returned to
1565   - the application (in this case, "IsDone" is set to FALSE which causes the
1566   - Scan method to proceed directly to the next part. *)
1567   -
1568   - PROCEDURE ProcessEntity;
1569   - (* Is called if there is an ampsersand '&' character found in the document.
1570   - IN "CurFinal" points to the ampersand
1571   - OUT "CurFinal" points to the first character after the semi-colon ';' *)
1572   - VAR
1573   - P : PChar;
1574   - Name : STRING;
1575   - EntityDef : TEntityDef;
1576   - ExternalEntity : TXmlParser;
1577   - BEGIN
1578   - P := StrScan (CurFinal , ';');
1579   - IF P <> NIL THEN BEGIN
1580   - SetStringSF (Name, CurFinal+1, P-1);
1581   -
1582   - // Is it a Character Entity?
1583   - IF (CurFinal+1)^ = '#' THEN BEGIN
1584   - IF UpCase ((CurFinal+2)^) = 'X' // !!! Can't use "CHR" for Unicode characters > 255:
1585   - THEN CurContent := CurContent + CHR (StrToIntDef ('$'+Copy (Name, 3, MaxInt), 32))
1586   - ELSE CurContent := CurContent + CHR (StrToIntDef (Copy (Name, 2, MaxInt), 32));
1587   - CurFinal := P+1;
1588   - EXIT;
1589   - END
1590   -
1591   - // Is it a Predefined Entity?
1592   - ELSE IF Name = 'lt' THEN BEGIN CurContent := CurContent + '<'; CurFinal := P+1; EXIT; END
1593   - ELSE IF Name = 'gt' THEN BEGIN CurContent := CurContent + '>'; CurFinal := P+1; EXIT; END
1594   - ELSE IF Name = 'amp' THEN BEGIN CurContent := CurContent + '&'; CurFinal := P+1; EXIT; END
1595   - ELSE IF Name = 'apos' THEN BEGIN CurContent := CurContent + ''''; CurFinal := P+1; EXIT; END
1596   - ELSE IF Name = 'quot' THEN BEGIN CurContent := CurContent + '"'; CurFinal := P+1; EXIT; END;
1597   -
1598   - // Replace with Entity from DTD
1599   - EntityDef := TEntityDef (Entities.Node (Name));
1600   - IF EntityDef <> NIL THEN BEGIN
1601   - IF EntityDef.Value <> '' THEN BEGIN
1602   - EntityStack.Push (P+1);
1603   - CurFinal := PChar (EntityDef.Value);
1604   - END
1605   - ELSE BEGIN
1606   - ExternalEntity := LoadExternalEntity (EntityDef.SystemId, EntityDef.PublicId, EntityDef.NotationName);
1607   - EntityStack.Push (ExternalEntity, P+1);
1608   - CurFinal := ExternalEntity.DocBuffer;
1609   - END;
1610   - END
1611   - ELSE BEGIN
1612   - CurContent := CurContent + Name;
1613   - CurFinal := P+1;
1614   - END;
1615   - END
1616   - ELSE BEGIN
1617   - INC (CurFinal);
1618   - END;
1619   - END;
1620   -
1621   -VAR
1622   - C : INTEGER;
1623   -BEGIN
1624   - CurFinal := CurStart;
1625   - CurPartType := ptContent;
1626   - CurContent := '';
1627   - C := 0;
1628   - REPEAT
1629   - CASE CurFinal^ OF
1630   - '&' : BEGIN
1631   - CurContent := CurContent + TranslateEncoding (StrLPas (CurFinal-C, C));
1632   - C := 0;
1633   - ProcessEntity;
1634   - CONTINUE;
1635   - END;
1636   - #0 : BEGIN
1637   - IF EntityStack.Count = 0 THEN
1638   - BREAK
1639   - ELSE BEGIN
1640   - CurContent := CurContent + TranslateEncoding (StrLPas (CurFinal-C, C));
1641   - C := 0;
1642   - CurFinal := EntityStack.Pop;
1643   - CONTINUE;
1644   - END;
1645   - END;
1646   - '<' : BREAK;
1647   - ELSE INC (C);
1648   - END;
1649   - INC (CurFinal);
1650   - UNTIL FALSE;
1651   - CurContent := CurContent + TranslateEncoding (StrLPas (CurFinal-C, C));
1652   - DEC (CurFinal);
1653   -
1654   - IF FNormalize THEN BEGIN
1655   - CurContent := ConvertWs (TrimWs (CurContent), TRUE);
1656   - IsDone := CurContent <> ''; // IsDone will only get FALSE if PackSpaces is TRUE
1657   - END;
1658   -END;
1659   -
1660   -
1661   -PROCEDURE TXmlParser.AnalyzeElementDecl (Start : PChar; VAR Final : PChar);
1662   - (* Parse <!ELEMENT declaration starting at "Start"
1663   - Final must point to the terminating '>' character
1664   - XmlSpec 3.2:
1665   - elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'
1666   - contentspec ::= 'EMPTY' | 'ANY' | Mixed | children
1667   - Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' |
1668   - '(' S? '#PCDATA' S? ')'
1669   - children ::= (choice | seq) ('?' | '*' | '+')?
1670   - choice ::= '(' S? cp ( S? '|' S? cp )* S? ')'
1671   - cp ::= (Name | choice | seq) ('?' | '*' | '+')?
1672   - seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'
1673   -
1674   - More simply:
1675   - contentspec ::= EMPTY
1676   - ANY
1677   - '(#PCDATA)'
1678   - '(#PCDATA | A | B)*'
1679   - '(A, B, C)'
1680   - '(A | B | C)'
1681   - '(A?, B*, C+),
1682   - '(A, (B | C | D)* )' *)
1683   -VAR
1684   - Element : TElemDef;
1685   - Elem2 : TElemDef;
1686   - F : PChar;
1687   - DER : TDtdElementRec;
1688   -BEGIN
1689   - Element := TElemDef.Create;
1690   - Final := Start + 9;
1691   - DER.Start := Start;
1692   - REPEAT
1693   - IF Final^ = '>' THEN BREAK;
1694   - IF (Final^ IN CNameStart) AND (Element.Name = '') THEN BEGIN
1695   - ExtractName (Final, CWhitespace, F);
1696   - SetStringSF (Element.Name, Final, F);
1697   - Final := F;
1698   - F := StrScan (Final+1, '>');
1699   - IF F = NIL THEN BEGIN
1700   - Element.Definition := STRING (Final);
1701   - Final := StrEnd (Final);
1702   - BREAK;
1703   - END
1704   - ELSE BEGIN
1705   - SetStringSF (Element.Definition, Final+1, F-1);
1706   - Final := F;
1707   - BREAK;
1708   - END;
1709   - END;
1710   - INC (Final);
1711   - UNTIL FALSE;
1712   - Element.Definition := DelChars (Element.Definition, CWhitespace);
1713   - ReplaceParameterEntities (Element.Definition);
1714   - IF Element.Definition = 'EMPTY' THEN Element.ElemType := etEmpty
1715   - ELSE IF Element.Definition = 'ANY' THEN Element.ElemType := etAny
1716   - ELSE IF Copy (Element.Definition, 1, 8) = '(#PCDATA' THEN Element.ElemType := etMixed
1717   - ELSE IF Copy (Element.Definition, 1, 1) = '(' THEN Element.ElemType := etChildren
1718   - ELSE Element.ElemType := etAny;
1719   -
1720   - Elem2 := Elements.Node (Element.Name);
1721   - IF Elem2 <> NIL THEN
1722   - Elements.Delete (Elements.IndexOf (Elem2));
1723   - Elements.Add (Element);
1724   - Final := StrScanE (Final, '>');
1725   - DER.ElementType := deElement;
1726   - DER.ElemDef := Element;
1727   - DER.Final := Final;
1728   - DtdElementFound (DER);
1729   -END;
1730   -
1731   -
1732   -PROCEDURE TXmlParser.AnalyzeAttListDecl (Start : PChar; VAR Final : PChar);
1733   - (* Parse <!ATTLIST declaration starting at "Start"
1734   - Final must point to the terminating '>' character
1735   - XmlSpec 3.3:
1736   - AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'
1737   - AttDef ::= S Name S AttType S DefaultDecl
1738   - AttType ::= StringType | TokenizedType | EnumeratedType
1739   - StringType ::= 'CDATA'
1740   - TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'
1741   - EnumeratedType ::= NotationType | Enumeration
1742   - NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'
1743   - Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
1744   - DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
1745   - AttValue ::= '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] | Reference)* "'"
1746   - Examples:
1747   - <!ATTLIST address
1748   - A1 CDATA "Default"
1749   - A2 ID #REQUIRED
1750   - A3 IDREF #IMPLIED
1751   - A4 IDREFS #IMPLIED
1752   - A5 ENTITY #FIXED "&at;&#252;"
1753   - A6 ENTITIES #REQUIRED
1754   - A7 NOTATION (WMF | DXF) "WMF"
1755   - A8 (A | B | C) #REQUIRED> *)
1756   -TYPE
1757   - TPhase = (phElementName, phName, phType, phNotationContent, phDefault);
1758   -VAR
1759   - Phase : TPhase;
1760   - F : PChar;
1761   - ElementName : STRING;
1762   - ElemDef : TElemDef;
1763   - AttrDef : TAttrDef;
1764   - AttrDef2 : TAttrDef;
1765   - Strg : STRING;
1766   - DER : TDtdElementRec;
1767   -BEGIN
1768   - Final := Start + 9; // The character after <!ATTLIST
1769   - Phase := phElementName;
1770   - DER.Start := Start;
1771   - AttrDef := NIL;
1772   - ElemDef := NIL;
1773   - REPEAT
1774   - IF NOT (Final^ IN CWhitespace) THEN
1775   - CASE Final^ OF
1776   - '%' : BEGIN
1777   - PushPE (Final);
1778   - CONTINUE;
1779   - END;
1780   - #0 : IF EntityStack.Count = 0 THEN
1781   - BREAK
1782   - ELSE BEGIN
1783   - Final := EntityStack.Pop;
1784   - CONTINUE;
1785   - END;
1786   - '>' : BREAK;
1787   - ELSE CASE Phase OF
1788   - phElementName : BEGIN
1789   - ExtractName (Final, CWhitespace + CQuoteChar + ['#'], F);
1790   - SetStringSF (ElementName, Final, F);
1791   - Final := F;
1792   - ElemDef := Elements.Node (ElementName);
1793   - IF ElemDef = NIL THEN BEGIN
1794   - ElemDef := TElemDef.Create;
1795   - ElemDef.Name := ElementName;
1796   - ElemDef.Definition := 'ANY';
1797   - ElemDef.ElemType := etAny;
1798   - Elements.Add (ElemDef);
1799   - END;
1800   - Phase := phName;
1801   - END;
1802   - phName : BEGIN
1803   - AttrDef := TAttrDef.Create;
1804   - ExtractName (Final, CWhitespace + CQuoteChar + ['#'], F);
1805   - SetStringSF (AttrDef.Name, Final, F);
1806   - Final := F;
1807   - AttrDef2 := TAttrDef (ElemDef.Node (AttrDef.Name));
1808   - IF AttrDef2 <> NIL THEN
1809   - ElemDef.Delete (ElemDef.IndexOf (AttrDef2));
1810   - ElemDef.Add (AttrDef);
1811   - Phase := phType;
1812   - END;
1813   - phType : BEGIN
1814   - IF Final^ = '(' THEN BEGIN
1815   - F := StrScan (Final+1, ')');
1816   - IF F <> NIL
1817   - THEN SetStringSF (AttrDef.TypeDef, Final+1, F-1)
1818   - ELSE AttrDef.TypeDef := STRING (Final+1);
1819   - AttrDef.TypeDef := DelChars (AttrDef.TypeDef, CWhitespace);
1820   - AttrDef.AttrType := atEnumeration;
1821   - ReplaceParameterEntities (AttrDef.TypeDef);
1822   - ReplaceCharacterEntities (AttrDef.TypeDef);
1823   - Phase := phDefault;
1824   - END
1825   - ELSE IF StrLComp (Final, 'NOTATION', 8) = 0 THEN BEGIN
1826   - INC (Final, 8);
1827   - AttrDef.AttrType := atNotation;
1828   - Phase := phNotationContent;
1829   - END
1830   - ELSE BEGIN
1831   - ExtractName (Final, CWhitespace+CQuoteChar+['#'], F);
1832   - SetStringSF (AttrDef.TypeDef, Final, F);
1833   - IF AttrDef.TypeDef = 'CDATA' THEN AttrDef.AttrType := atCData
1834   - ELSE IF AttrDef.TypeDef = 'ID' THEN AttrDef.AttrType := atId
1835   - ELSE IF AttrDef.TypeDef = 'IDREF' THEN AttrDef.AttrType := atIdRef
1836   - ELSE IF AttrDef.TypeDef = 'IDREFS' THEN AttrDef.AttrType := atIdRefs
1837   - ELSE IF AttrDef.TypeDef = 'ENTITY' THEN AttrDef.AttrType := atEntity
1838   - ELSE IF AttrDef.TypeDef = 'ENTITIES' THEN AttrDef.AttrType := atEntities
1839   - ELSE IF AttrDef.TypeDef = 'NMTOKEN' THEN AttrDef.AttrType := atNmToken
1840   - ELSE IF AttrDef.TypeDef = 'NMTOKENS' THEN AttrDef.AttrType := atNmTokens;
1841   - Phase := phDefault;
1842   - END
1843   - END;
1844   - phNotationContent : BEGIN
1845   - F := StrScan (Final, ')');
1846   - IF F <> NIL THEN
1847   - SetStringSF (AttrDef.Notations, Final+1, F-1)
1848   - ELSE BEGIN
1849   - AttrDef.Notations := STRING (Final+1);
1850   - Final := StrEnd (Final);
1851   - END;
1852   - ReplaceParameterEntities (AttrDef.Notations);
1853   - AttrDef.Notations := DelChars (AttrDef.Notations, CWhitespace);
1854   - Phase := phDefault;
1855   - END;
1856   - phDefault : BEGIN
1857   - IF Final^ = '#' THEN BEGIN
1858   - ExtractName (Final, CWhiteSpace + CQuoteChar, F);
1859   - SetStringSF (Strg, Final, F);
1860   - Final := F;
1861   - ReplaceParameterEntities (Strg);
1862   - IF Strg = '#REQUIRED' THEN BEGIN AttrDef.DefaultType := adRequired; Phase := phName; END
1863   - ELSE IF Strg = '#IMPLIED' THEN BEGIN AttrDef.DefaultType := adImplied; Phase := phName; END
1864   - ELSE IF Strg = '#FIXED' THEN AttrDef.DefaultType := adFixed;
1865   - END
1866   - ELSE IF (Final^ IN CQuoteChar) THEN BEGIN
1867   - ExtractQuote (Final, AttrDef.Value, Final);
1868   - ReplaceParameterEntities (AttrDef.Value);
1869   - ReplaceCharacterEntities (AttrDef.Value);
1870   - Phase := phName;
1871   - END;
1872   - IF Phase = phName THEN BEGIN
1873   - AttrDef := NIL;
1874   - END;
1875   - END;
1876   -
1877   - END;
1878   - END;
1879   - INC (Final);
1880   - UNTIL FALSE;
1881   -
1882   - Final := StrScan (Final, '>');
1883   -
1884   - DER.ElementType := deAttList;
1885   - DER.ElemDef := ElemDef;
1886   - DER.Final := Final;
1887   - DtdElementFound (DER);
1888   -END;
1889   -
1890   -
1891   -PROCEDURE TXmlParser.AnalyzeEntityDecl (Start : PChar; VAR Final : PChar);
1892   - (* Parse <!ENTITY declaration starting at "Start"
1893   - Final must point to the terminating '>' character
1894   - XmlSpec 4.2:
1895   - EntityDecl ::= '<!ENTITY' S Name S EntityDef S? '>' |
1896   - '<!ENTITY' S '%' S Name S PEDef S? '>'
1897   - EntityDef ::= EntityValue | (ExternalID NDataDecl?)
1898   - PEDef ::= EntityValue | ExternalID
1899   - NDataDecl ::= S 'NDATA' S Name
1900   - EntityValue ::= '"' ([^%&"] | PEReference | EntityRef | CharRef)* '"' |
1901   - "'" ([^%&'] | PEReference | EntityRef | CharRef)* "'"
1902   - PEReference ::= '%' Name ';'
1903   -
1904   - Examples
1905   - <!ENTITY test1 "Stefan Heymann"> <!-- Internal, general, parsed -->
1906   - <!ENTITY test2 SYSTEM "ent2.xml"> <!-- External, general, parsed -->
1907   - <!ENTITY test2 SYSTEM "ent3.gif" NDATA gif> <!-- External, general, unparsed -->
1908   - <!ENTITY % test3 "<!ELEMENT q ANY>"> <!-- Internal, parameter -->
1909   - <!ENTITY % test6 SYSTEM "ent6.xml"> <!-- External, parameter -->
1910   - <!ENTITY test4 "&test1; ist lieb"> <!-- IGP, Replacement text <> literal value -->
1911   - <!ENTITY test5 "<p>Dies ist ein Test-Absatz</p>"> <!-- IGP, See XmlSpec 2.4 -->
1912   - *)
1913   -TYPE
1914   - TPhase = (phName, phContent, phNData, phNotationName, phFinalGT);
1915   -VAR
1916   - Phase : TPhase;
1917   - IsParamEntity : BOOLEAN;
1918   - F : PChar;
1919   - ExternalID : TExternalID;
1920   - EntityDef : TEntityDef;
1921   - EntityDef2 : TEntityDef;
1922   - DER : TDtdElementRec;
1923   -BEGIN
1924   - Final := Start + 8; // First char after <!ENTITY
1925   - DER.Start := Start;
1926   - Phase := phName;
1927   - IsParamEntity := FALSE;
1928   - EntityDef := TEntityDef.Create;
1929   - REPEAT
1930   - IF NOT (Final^ IN CWhitespace) THEN
1931   - CASE Final^ OF
1932   - '%' : IsParamEntity := TRUE;
1933   - '>' : BREAK;
1934   - ELSE CASE Phase OF
1935   - phName : IF Final^ IN CNameStart THEN BEGIN
1936   - ExtractName (Final, CWhitespace + CQuoteChar, F);
1937   - SetStringSF (EntityDef.Name, Final, F);
1938   - Final := F;
1939   - Phase := phContent;
1940   - END;
1941   - phContent : IF Final^ IN CQuoteChar THEN BEGIN
1942   - ExtractQuote (Final, EntityDef.Value, Final);
1943   - Phase := phFinalGT;
1944   - END
1945   - ELSE IF (StrLComp (Final, 'SYSTEM', 6) = 0) OR
1946   - (StrLComp (Final, 'PUBLIC', 6) = 0) THEN BEGIN
1947   - ExternalID := TExternalID.Create (Final);
1948   - EntityDef.SystemId := ExternalID.SystemId;
1949   - EntityDef.PublicId := ExternalID.PublicId;
1950   - Final := ExternalID.Final;
1951   - Phase := phNData;
1952   - ExternalID.Free;
1953   - END;
1954   - phNData : IF StrLComp (Final, 'NDATA', 5) = 0 THEN BEGIN
1955   - INC (Final, 4);
1956   - Phase := phNotationName;
1957   - END;
1958   - phNotationName : IF Final^ IN CNameStart THEN BEGIN
1959   - ExtractName (Final, CWhitespace + ['>'], F);
1960   - SetStringSF (EntityDef.NotationName, Final, F);
1961   - Final := F;
1962   - Phase := phFinalGT;
1963   - END;
1964   - phFinalGT : ; // -!- There is an error in the document if this branch is called
1965   - END;
1966   - END;
1967   - INC (Final);
1968   - UNTIL FALSE;
1969   - IF IsParamEntity THEN BEGIN
1970   - EntityDef2 := TEntityDef (ParEntities.Node (EntityDef.Name));
1971   - IF EntityDef2 <> NIL THEN
1972   - ParEntities.Delete (ParEntities.IndexOf (EntityDef2));
1973   - ParEntities.Add (EntityDef);
1974   - ReplaceCharacterEntities (EntityDef.Value);
1975   - END
1976   - ELSE BEGIN
1977   - EntityDef2 := TEntityDef (Entities.Node (EntityDef.Name));
1978   - IF EntityDef2 <> NIL THEN
1979   - Entities.Delete (Entities.IndexOf (EntityDef2));
1980   - Entities.Add (EntityDef);
1981   - ReplaceParameterEntities (EntityDef.Value); // Create replacement texts (see XmlSpec 4.5)
1982   - ReplaceCharacterEntities (EntityDef.Value);
1983   - END;
1984   - Final := StrScanE (Final, '>');
1985   -
1986   - DER.ElementType := deEntity;
1987   - DER.EntityDef := EntityDef;
1988   - DER.Final := Final;
1989   - DtdElementFound (DER);
1990   -END;
1991   -
1992   -
1993   -PROCEDURE TXmlParser.AnalyzeNotationDecl (Start : PChar; VAR Final : PChar);
1994   - // Parse <!NOTATION declaration starting at "Start"
1995   - // Final must point to the terminating '>' character
1996   - // XmlSpec 4.7: NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S? '>'
1997   -TYPE
1998   - TPhase = (phName, phExtId, phEnd);
1999   -VAR
2000   - ExternalID : TExternalID;
2001   - Phase : TPhase;
2002   - F : PChar;
2003   - NotationDef : TNotationDef;
2004   - DER : TDtdElementRec;
2005   -BEGIN
2006   - Final := Start + 10; // Character after <!NOTATION
2007   - DER.Start := Start;
2008   - Phase := phName;
2009   - NotationDef := TNotationDef.Create;
2010   - REPEAT
2011   - IF NOT (Final^ IN CWhitespace) THEN
2012   - CASE Final^ OF
2013   - '>',
2014   - #0 : BREAK;
2015   - ELSE CASE Phase OF
2016   - phName : BEGIN
2017   - ExtractName (Final, CWhitespace + ['>'], F);
2018   - SetStringSF (NotationDef.Name, Final, F);
2019   - Final := F;
2020   - Phase := phExtId;
2021   - END;
2022   - phExtId : BEGIN
2023   - ExternalID := TExternalID.Create (Final);
2024   - NotationDef.Value := ExternalID.SystemId;
2025   - NotationDef.PublicId := ExternalID.PublicId;
2026   - Final := ExternalId.Final;
2027   - ExternalId.Free;
2028   - Phase := phEnd;
2029   - END;
2030   - phEnd : ; // -!- There is an error in the document if this branch is called
2031   - END;
2032   - END;
2033   - INC (Final);
2034   - UNTIL FALSE;
2035   - Notations.Add (NotationDef);
2036   - Final := StrScanE (Final, '>');
2037   -
2038   - DER.ElementType := deNotation;
2039   - DER.NotationDef := NotationDef;
2040   - DER.Final := Final;
2041   - DtdElementFound (DER);
2042   -END;
2043   -
2044   -
2045   -PROCEDURE TXmlParser.PushPE (VAR Start : PChar);
2046   - (* If there is a parameter entity reference found in the data stream,
2047   - the current position will be pushed to the entity stack.
2048   - Start: IN Pointer to the '%' character starting the PE reference
2049   - OUT Pointer to first character of PE replacement text *)
2050   -VAR
2051   - P : PChar;
2052   - EntityDef : TEntityDef;
2053   -BEGIN
2054   - P := StrScan (Start, ';');
2055   - IF P <> NIL THEN BEGIN
2056   - EntityDef := TEntityDef (ParEntities.Node (StrSFPas (Start+1, P-1)));
2057   - IF EntityDef <> NIL THEN BEGIN
2058   - EntityStack.Push (P+1);
2059   - Start := PChar (EntityDef.Value);
2060   - END
2061   - ELSE
2062   - Start := P+1;
2063   - END;
2064   -END;
2065   -
2066   -
2067   -PROCEDURE TXmlParser.ReplaceCharacterEntities (VAR Str : STRING);
2068   - // Replaces all Character Entity References in the String
2069   -VAR
2070   - Start : INTEGER;
2071   - PAmp : PChar;
2072   - PSemi : PChar;
2073   - PosAmp : INTEGER;
2074   - Len : INTEGER; // Length of Entity Reference
2075   -BEGIN
2076   - IF Str = '' THEN EXIT;
2077   - Start := 1;
2078   - REPEAT
2079   - PAmp := StrPos (PChar (Str) + Start-1, '&#');
2080   - IF PAmp = NIL THEN BREAK;
2081   - PSemi := StrScan (PAmp+2, ';');
2082   - IF PSemi = NIL THEN BREAK;
2083   - PosAmp := PAmp - PChar (Str) + 1;
2084   - Len := PSemi-PAmp+1;
2085   - IF CompareText (Str [PosAmp+2], 'x') = 0 // !!! Can't use "CHR" for Unicode characters > 255
2086   - THEN Str [PosAmp] := CHR (StrToIntDef ('$'+Copy (Str, PosAmp+3, Len-4), 0))
2087   - ELSE Str [PosAmp] := CHR (StrToIntDef (Copy (Str, PosAmp+2, Len-3), 32));
2088   - Delete (Str, PosAmp+1, Len-1);
2089   - Start := PosAmp + 1;
2090   - UNTIL FALSE;
2091   -END;
2092   -
2093   -
2094   -PROCEDURE TXmlParser.ReplaceParameterEntities (VAR Str : STRING);
2095   - // Recursively replaces all Parameter Entity References in the String
2096   - PROCEDURE ReplaceEntities (VAR Str : STRING);
2097   - VAR
2098   - Start : INTEGER;
2099   - PAmp : PChar;
2100   - PSemi : PChar;
2101   - PosAmp : INTEGER;
2102   - Len : INTEGER;
2103   - Entity : TEntityDef;
2104   - Repl : STRING; // Replacement
2105   - BEGIN
2106   - IF Str = '' THEN EXIT;
2107   - Start := 1;
2108   - REPEAT
2109   - PAmp := StrPos (PChar (Str)+Start-1, '%');
2110   - IF PAmp = NIL THEN BREAK;
2111   - PSemi := StrScan (PAmp+2, ';');
2112   - IF PSemi = NIL THEN BREAK;
2113   - PosAmp := PAmp - PChar (Str) + 1;
2114   - Len := PSemi-PAmp+1;
2115   - Entity := TEntityDef (ParEntities.Node (Copy (Str, PosAmp+1, Len-2)));
2116   - IF Entity <> NIL THEN BEGIN
2117   - Repl := Entity.Value;
2118   - ReplaceEntities (Repl); // Recursion
2119   - END
2120   - ELSE
2121   - Repl := Copy (Str, PosAmp, Len);
2122   - Delete (Str, PosAmp, Len);
2123   - Insert (Repl, Str, PosAmp);
2124   - Start := PosAmp + Length (Repl);
2125   - UNTIL FALSE;
2126   - END;
2127   -BEGIN
2128   - ReplaceEntities (Str);
2129   -END;
2130   -
2131   -
2132   -PROCEDURE TXmlParser.ReplaceGeneralEntities (VAR Str : STRING);
2133   - // Recursively replaces General Entity References in the String
2134   - PROCEDURE ReplaceEntities (VAR Str : STRING);
2135   - VAR
2136   - Start : INTEGER;
2137   - PAmp : PChar;
2138   - PSemi : PChar;
2139   - PosAmp : INTEGER;
2140   - Len : INTEGER;
2141   - EntityDef : TEntityDef;
2142   - EntName : STRING;
2143   - Repl : STRING; // Replacement
2144   - ExternalEntity : TXmlParser;
2145   - BEGIN
2146   - IF Str = '' THEN EXIT;
2147   - Start := 1;
2148   - REPEAT
2149   - PAmp := StrPos (PChar (Str)+Start-1, '&');
2150   - IF PAmp = NIL THEN BREAK;
2151   - PSemi := StrScan (PAmp+2, ';');
2152   - IF PSemi = NIL THEN BREAK;
2153   - PosAmp := PAmp - PChar (Str) + 1;
2154   - Len := PSemi-PAmp+1;
2155   - EntName := Copy (Str, PosAmp+1, Len-2);
2156   - IF EntName = 'lt' THEN Repl := '<'
2157   - ELSE IF EntName = 'gt' THEN Repl := '>'
2158   - ELSE IF EntName = 'amp' THEN Repl := '&'
2159   - ELSE IF EntName = 'apos' THEN Repl := ''''
2160   - ELSE IF EntName = 'quot' THEN Repl := '"'
2161   - ELSE BEGIN
2162   - EntityDef := TEntityDef (Entities.Node (EntName));
2163   - IF EntityDef <> NIL THEN BEGIN
2164   - IF EntityDef.Value <> '' THEN // Internal Entity
2165   - Repl := EntityDef.Value
2166   - ELSE BEGIN // External Entity
2167   - ExternalEntity := LoadExternalEntity (EntityDef.SystemId, EntityDef.PublicId, EntityDef.NotationName);
2168   - Repl := StrPas (ExternalEntity.DocBuffer); // !!! What if it contains a Text Declaration?
2169   - ExternalEntity.Free;
2170   - END;
2171   - ReplaceEntities (Repl); // Recursion
2172   - END
2173   - ELSE
2174   - Repl := Copy (Str, PosAmp, Len);
2175   - END;
2176   - Delete (Str, PosAmp, Len);
2177   - Insert (Repl, Str, PosAmp);
2178   - Start := PosAmp + Length (Repl);
2179   - UNTIL FALSE;
2180   - END;
2181   -BEGIN
2182   - ReplaceEntities (Str);
2183   -END;
2184   -
2185   -
2186   -FUNCTION TXmlParser.LoadExternalEntity (SystemId, PublicId, Notation : STRING) : TXmlParser;
2187   - // This will be called whenever there is a Parsed External Entity or
2188   - // the DTD External Subset to be parsed.
2189   - // It has to create a TXmlParser instance and load the desired Entity.
2190   - // This instance of LoadExternalEntity assumes that "SystemId" is a valid
2191   - // file name (relative to the Document source) and loads this file using
2192   - // the LoadFromFile method.
2193   -VAR
2194   - Filename : STRING;
2195   -BEGIN
2196   - // --- Convert System ID to complete filename
2197   - Filename := StringReplace (SystemId, '/', '\', [rfReplaceAll]);
2198   - IF Copy (FSource, 1, 1) <> '<' THEN
2199   - IF (Copy (Filename, 1, 2) = '\\') OR (Copy (Filename, 2, 1) = ':') THEN
2200   - // Already has an absolute Path
2201   - ELSE BEGIN
2202   - Filename := ExtractFilePath (FSource) + Filename;
2203   - END;
2204   -
2205   - // --- Load the File
2206   - Result := TXmlParser.Create;
2207   - Result.LoadFromFile (Filename);
2208   -END;
2209   -
2210   -
2211   -FUNCTION TXmlParser.TranslateEncoding (CONST Source : STRING) : STRING;
2212   - // The member variable "CurEncoding" always holds the name of the current
2213   - // encoding, e.g. 'UTF-8' or 'ISO-8859-1'.
2214   - // This virtual method "TranslateEncoding" is responsible for translating
2215   - // the content passed in the "Source" parameter to the Encoding which
2216   - // is expected by the application.
2217   - // This instance of "TranlateEncoding" assumes that the Application expects
2218   - // Windows ANSI (Win1252) strings. It is able to transform UTF-8 or ISO-8859-1
2219   - // encodings.
2220   - // If you want your application to understand or create other encodings, you
2221   - // override this function.
2222   -BEGIN
2223   - IF CurEncoding = 'UTF-8'
2224   - THEN Result := Utf8ToAnsi (Source)
2225   - ELSE Result := Source;
2226   -END;
2227   -
2228   -
2229   -PROCEDURE TXmlParser.DtdElementFound (DtdElementRec : TDtdElementRec);
2230   - // This method is called for every element which is found in the DTD
2231   - // declaration. The variant record TDtdElementRec is passed which
2232   - // holds informations about the element.
2233   - // You can override this function to handle DTD declarations.
2234   - // Note that when you parse the same Document instance a second time,
2235   - // the DTD will not get parsed again.
2236   -BEGIN
2237   -END;
2238   -
2239   -
2240   -FUNCTION TXmlParser.GetDocBuffer: PChar;
2241   - // Returns FBuffer or a pointer to a NUL char if Buffer is empty
2242   -BEGIN
2243   - IF FBuffer = NIL
2244   - THEN Result := #0
2245   - ELSE Result := FBuffer;
2246   -END;
2247   -
2248   -
2249   -(*$IFNDEF HAS_CONTNRS_UNIT
2250   -===============================================================================================
2251   -TObjectList
2252   -===============================================================================================
2253   -*)
2254   -
2255   -DESTRUCTOR TObjectList.Destroy;
2256   -BEGIN
2257   - Clear;
2258   - SetCapacity(0);
2259   - INHERITED Destroy;
2260   -END;
2261   -
2262   -
2263   -PROCEDURE TObjectList.Delete (Index : INTEGER);
2264   -BEGIN
2265   - IF (Index < 0) OR (Index >= Count) THEN EXIT;
2266   - TObject (Items [Index]).Free;
2267   - INHERITED Delete (Index);
2268   -END;
2269   -
2270   -
2271   -PROCEDURE TObjectList.Clear;
2272   -BEGIN
2273   - WHILE Count > 0 DO
2274   - Delete (Count-1);
2275   -END;
2276   -
2277   -(*$ENDIF *)
2278   -
2279   -(*
2280   -===============================================================================================
2281   -TNvpNode
2282   ---------
2283   -Node base class for the TNvpList
2284   -===============================================================================================
2285   -*)
2286   -
2287   -CONSTRUCTOR TNvpNode.Create (TheName, TheValue : STRING);
2288   -BEGIN
2289   - INHERITED Create;
2290   - Name := TheName;
2291   - Value := TheValue;
2292   -END;
2293   -
2294   -
2295   -(*
2296   -===============================================================================================
2297   -TNvpList
2298   ---------
2299   -A generic List of Name-Value Pairs, based on the TObjectList introduced in Delphi 5
2300   -===============================================================================================
2301   -*)
2302   -
2303   -PROCEDURE TNvpList.Add (Node : TNvpNode);
2304   -VAR
2305   - I : INTEGER;
2306   -BEGIN
2307   - FOR I := Count-1 DOWNTO 0 DO
2308   - IF Node.Name > TNvpNode (Items [I]).Name THEN BEGIN
2309   - Insert (I+1, Node);
2310   - EXIT;
2311   - END;
2312   - Insert (0, Node);
2313   -END;
2314   -
2315   -
2316   -
2317   -FUNCTION TNvpList.Node (Name : STRING) : TNvpNode;
2318   - // Binary search for Node
2319   -VAR
2320   - L, H : INTEGER; // Low, High Limit
2321   - T, C : INTEGER; // Test Index, Comparison result
2322   - Last : INTEGER; // Last Test Index
2323   -BEGIN
2324   - IF Count=0 THEN BEGIN
2325   - Result := NIL;
2326   - EXIT;
2327   - END;
2328   -
2329   - L := 0;
2330   - H := Count;
2331   - Last := -1;
2332   - REPEAT
2333   - T := (L+H) DIV 2;
2334   - IF T=Last THEN BREAK;
2335   - Result := TNvpNode (Items [T]);
2336   - C := CompareStr (Result.Name, Name);
2337   - IF C = 0 THEN EXIT
2338   - ELSE IF C < 0 THEN L := T
2339   - ELSE H := T;
2340   - Last := T;
2341   - UNTIL FALSE;
2342   - Result := NIL;
2343   -END;
2344   -
2345   -
2346   -FUNCTION TNvpList.Node (Index : INTEGER) : TNvpNode;
2347   -BEGIN
2348   - IF (Index < 0) OR (Index >= Count)
2349   - THEN Result := NIL
2350   - ELSE Result := TNvpNode (Items [Index]);
2351   -END;
2352   -
2353   -
2354   -FUNCTION TNvpList.Value (Name : STRING) : STRING;
2355   -VAR
2356   - Nvp : TNvpNode;
2357   -BEGIN
2358   - Nvp := TNvpNode (Node (Name));
2359   - IF Nvp <> NIL
2360   - THEN Result := Nvp.Value
2361   - ELSE Result := '';
2362   -END;
2363   -
2364   -
2365   -FUNCTION TNvpList.Value (Index : INTEGER) : STRING;
2366   -BEGIN
2367   - IF (Index < 0) OR (Index >= Count)
2368   - THEN Result := ''
2369   - ELSE Result := TNvpNode (Items [Index]).Value;
2370   -END;
2371   -
2372   -
2373   -FUNCTION TNvpList.Name (Index : INTEGER) : STRING;
2374   -BEGIN
2375   - IF (Index < 0) OR (Index >= Count)
2376   - THEN Result := ''
2377   - ELSE Result := TNvpNode (Items [Index]).Name;
2378   -END;
2379   -
2380   -
2381   -(*
2382   -===============================================================================================
2383   -TAttrList
2384   -List of Attributes. The "Analyze" method extracts the Attributes from the given Buffer.
2385   -Is used for extraction of Attributes in Start-Tags, Empty-Element Tags and the "pseudo"
2386   -attributes in XML Prologs, Text Declarations and PIs.
2387   -===============================================================================================
2388   -*)
2389   -
2390   -PROCEDURE TAttrList.Analyze (Start : PChar; VAR Final : PChar);
2391   - // Analyze the Buffer for Attribute=Name pairs.
2392   - // Terminates when there is a character which is not IN CNameStart
2393   - // (e.g. '?>' or '>' or '/>')
2394   -TYPE
2395   - TPhase = (phName, phEq, phValue);
2396   -VAR
2397   - Phase : TPhase;
2398   - F : PChar;
2399   - Name : STRING;
2400   - Value : STRING;
2401   - Attr : TAttr;
2402   -BEGIN
2403   - Clear;
2404   - Phase := phName;
2405   - Final := Start;
2406   - REPEAT
2407   - IF (Final^ = #0) OR (Final^ = '>') THEN BREAK;
2408   - IF NOT (Final^ IN CWhitespace) THEN
2409   - CASE Phase OF
2410   - phName : BEGIN
2411   - IF NOT (Final^ IN CNameStart) THEN EXIT;
2412   - ExtractName (Final, CWhitespace + ['=', '/'], F);
2413   - SetStringSF (Name, Final, F);
2414   - Final := F;
2415   - Phase := phEq;
2416   - END;
2417   - phEq : BEGIN
2418   - IF Final^ = '=' THEN
2419   - Phase := phValue
2420   - END;
2421   - phValue : BEGIN
2422   - IF Final^ IN CQuoteChar THEN BEGIN
2423   - ExtractQuote (Final, Value, F);
2424   - Attr := TAttr.Create;
2425   - Attr.Name := Name;
2426   - Attr.Value := Value;
2427   - Attr.ValueType := vtNormal;
2428   - Add (Attr);
2429   - Final := F;
2430   - Phase := phName;
2431   - END;
2432   - END;
2433   - END;
2434   - INC (Final);
2435   - UNTIL FALSE;
2436   -END;
2437   -
2438   -
2439   -(*
2440   -===============================================================================================
2441   -TElemList
2442   -List of TElemDef nodes.
2443   -===============================================================================================
2444   -*)
2445   -
2446   -FUNCTION TElemList.Node (Name : STRING) : TElemDef;
2447   - // Binary search for the Node with the given Name
2448   -VAR
2449   - L, H : INTEGER; // Low, High Limit
2450   - T, C : INTEGER; // Test Index, Comparison result
2451   - Last : INTEGER; // Last Test Index
2452   -BEGIN
2453   - IF Count=0 THEN BEGIN
2454   - Result := NIL;
2455   - EXIT;
2456   - END;
2457   -
2458   - L := 0;
2459   - H := Count;
2460   - Last := -1;
2461   - REPEAT
2462   - T := (L+H) DIV 2;
2463   - IF T=Last THEN BREAK;
2464   - Result := TElemDef (Items [T]);
2465   - C := CompareStr (Result.Name, Name);
2466   - IF C = 0 THEN EXIT
2467   - ELSE IF C < 0 THEN L := T
2468   - ELSE H := T;
2469   - Last := T;
2470   - UNTIL FALSE;
2471   - Result := NIL;
2472   -END;
2473   -
2474   -
2475   -PROCEDURE TElemList.Add (Node : TElemDef);
2476   -VAR
2477   - I : INTEGER;
2478   -BEGIN
2479   - FOR I := Count-1 DOWNTO 0 DO
2480   - IF Node.Name > TElemDef (Items [I]).Name THEN BEGIN
2481   - Insert (I+1, Node);
2482   - EXIT;
2483   - END;
2484   - Insert (0, Node);
2485   -END;
2486   -
2487   -
2488   -(*
2489   -===============================================================================================
2490   -TScannerXmlParser
2491   -A TXmlParser descendant for the TCustomXmlScanner component
2492   -===============================================================================================
2493   -*)
2494   -
2495   -TYPE
2496   - TScannerXmlParser = CLASS (TXmlParser)
2497   - Scanner : TCustomXmlScanner;
2498   - CONSTRUCTOR Create (TheScanner : TCustomXmlScanner);
2499   - FUNCTION LoadExternalEntity (SystemId, PublicId,
2500   - Notation : STRING) : TXmlParser; OVERRIDE;
2501   - FUNCTION TranslateEncoding (CONST Source : STRING) : STRING; OVERRIDE;
2502   - PROCEDURE DtdElementFound (DtdElementRec : TDtdElementRec); OVERRIDE;
2503   - END;
2504   -
2505   -CONSTRUCTOR TScannerXmlParser.Create (TheScanner : TCustomXmlScanner);
2506   -BEGIN
2507   - INHERITED Create;
2508   - Scanner := TheScanner;
2509   -END;
2510   -
2511   -
2512   -FUNCTION TScannerXmlParser.LoadExternalEntity (SystemId, PublicId, Notation : STRING) : TXmlParser;
2513   -BEGIN
2514   - IF Assigned (Scanner.FOnLoadExternal)
2515   - THEN Scanner.FOnLoadExternal (Scanner, SystemId, PublicId, Notation, Result)
2516   - ELSE Result := INHERITED LoadExternalEntity (SystemId, PublicId, Notation);
2517   -END;
2518   -
2519   -
2520   -FUNCTION TScannerXmlParser.TranslateEncoding (CONST Source : STRING) : STRING;
2521   -BEGIN
2522   - IF Assigned (Scanner.FOnTranslateEncoding)
2523   - THEN Result := Scanner.FOnTranslateEncoding (Scanner, CurEncoding, Source)
2524   - ELSE Result := INHERITED TranslateEncoding (Source);
2525   -END;
2526   -
2527   -
2528   -PROCEDURE TScannerXmlParser.DtdElementFound (DtdElementRec : TDtdElementRec);
2529   -BEGIN
2530   - WITH DtdElementRec DO
2531   - CASE ElementType OF
2532   - deElement : Scanner.WhenElement (ElemDef);
2533   - deAttList : Scanner.WhenAttList (ElemDef);
2534   - deEntity : Scanner.WhenEntity (EntityDef);
2535   - deNotation : Scanner.WhenNotation (NotationDef);
2536   - dePI : Scanner.WhenPI (STRING (Target), STRING (Content), AttrList);
2537   - deComment : Scanner.WhenComment (StrSFPas (Start, Final));
2538   - deError : Scanner.WhenDtdError (Pos);
2539   - END;
2540   -END;
2541   -
2542   -
2543   -(*
2544   -===============================================================================================
2545   -TCustomXmlScanner
2546   -===============================================================================================
2547   -*)
2548   -
2549   -CONSTRUCTOR TCustomXmlScanner.Create (AOwner: TComponent);
2550   -BEGIN
2551   - INHERITED;
2552   - FXmlParser := TScannerXmlParser.Create (Self);
2553   -END;
2554   -
2555   -
2556   -DESTRUCTOR TCustomXmlScanner.Destroy;
2557   -BEGIN
2558   - FXmlParser.Free;
2559   - INHERITED;
2560   -END;
2561   -
2562   -
2563   -PROCEDURE TCustomXmlScanner.LoadFromFile (Filename : TFilename);
2564   - // Load XML Document from file
2565   -BEGIN
2566   - FXmlParser.LoadFromFile (Filename);
2567   -END;
2568   -
2569   -
2570   -PROCEDURE TCustomXmlScanner.LoadFromBuffer (Buffer : PChar);
2571   - // Load XML Document from buffer
2572   -BEGIN
2573   - FXmlParser.LoadFromBuffer (Buffer);
2574   -END;
2575   -
2576   -
2577   -PROCEDURE TCustomXmlScanner.SetBuffer (Buffer : PChar);
2578   - // Refer to Buffer
2579   -BEGIN
2580   - FXmlParser.SetBuffer (Buffer);
2581   -END;
2582   -
2583   -
2584   -FUNCTION TCustomXmlScanner.GetFilename : TFilename;
2585   -BEGIN
2586   - Result := FXmlParser.Source;
2587   -END;
2588   -
2589   -
2590   -FUNCTION TCustomXmlScanner.GetNormalize : BOOLEAN;
2591   -BEGIN
2592   - Result := FXmlParser.Normalize;
2593   -END;
2594   -
2595   -
2596   -PROCEDURE TCustomXmlScanner.SetNormalize (Value : BOOLEAN);
2597   -BEGIN
2598   - FXmlParser.Normalize := Value;
2599   -END;
2600   -
2601   -
2602   -PROCEDURE TCustomXmlScanner.WhenXmlProlog(XmlVersion, Encoding: STRING; Standalone : BOOLEAN);
2603   - // Is called when the parser has parsed the <? xml ?> declaration of the prolog
2604   -BEGIN
2605   - IF Assigned (FOnXmlProlog) THEN FOnXmlProlog (Self, XmlVersion, Encoding, Standalone);
2606   -END;
2607   -
2608   -
2609   -PROCEDURE TCustomXmlScanner.WhenComment (Comment : STRING);
2610   - // Is called when the parser has parsed a <!-- comment -->
2611   -BEGIN
2612   - IF Assigned (FOnComment) THEN FOnComment (Self, Comment);
2613   -END;
2614   -
2615   -
2616   -PROCEDURE TCustomXmlScanner.WhenPI (Target, Content: STRING; Attributes : TAttrList);
2617   - // Is called when the parser has parsed a <?processing instruction ?>
2618   -BEGIN
2619   - IF Assigned (FOnPI) THEN FOnPI (Self, Target, Content, Attributes);
2620   -END;
2621   -
2622   -
2623   -PROCEDURE TCustomXmlScanner.WhenDtdRead (RootElementName : STRING);
2624   - // Is called when the parser has completely parsed the DTD
2625   -BEGIN
2626   - IF Assigned (FOnDtdRead) THEN FOnDtdRead (Self, RootElementName);
2627   -END;
2628   -
2629   -
2630   -PROCEDURE TCustomXmlScanner.WhenStartTag (TagName : STRING; Attributes : TAttrList);
2631   - // Is called when the parser has parsed a start tag like <p>
2632   -BEGIN
2633   - IF Assigned (FOnStartTag) THEN FOnStartTag (Self, TagName, Attributes);
2634   -END;
2635   -
2636   -
2637   -PROCEDURE TCustomXmlScanner.WhenEmptyTag (TagName : STRING; Attributes : TAttrList);
2638   - // Is called when the parser has parsed an Empty Element Tag like <br/>
2639   -BEGIN
2640   - IF Assigned (FOnEmptyTag) THEN FOnEmptyTag (Self, TagName, Attributes);
2641   -END;
2642   -
2643   -
2644   -PROCEDURE TCustomXmlScanner.WhenEndTag (TagName : STRING);
2645   - // Is called when the parser has parsed an End Tag like </p>
2646   -BEGIN
2647   - IF Assigned (FOnEndTag) THEN FOnEndTag (Self, TagName);
2648   -END;
2649   -
2650   -
2651   -PROCEDURE TCustomXmlScanner.WhenContent (Content : STRING);
2652   - // Is called when the parser has parsed an element's text content
2653   -BEGIN
2654   - IF Assigned (FOnContent) THEN FOnContent (Self, Content);
2655   -END;
2656   -
2657   -
2658   -PROCEDURE TCustomXmlScanner.WhenCData (Content : STRING);
2659   - // Is called when the parser has parsed a CDATA section
2660   -BEGIN
2661   - IF Assigned (FOnCData) THEN FOnCData (Self, Content);
2662   -END;
2663   -
2664   -
2665   -PROCEDURE TCustomXmlScanner.WhenElement (ElemDef : TElemDef);
2666   - // Is called when the parser has parsed an <!ELEMENT> definition
2667   - // inside the DTD
2668   -BEGIN
2669   - IF Assigned (FOnElement) THEN FOnElement (Self, ElemDef);
2670   -END;
2671   -
2672   -
2673   -PROCEDURE TCustomXmlScanner.WhenAttList (ElemDef : TElemDef);
2674   - // Is called when the parser has parsed an <!ATTLIST> definition
2675   - // inside the DTD
2676   -BEGIN
2677   - IF Assigned (FOnAttList) THEN FOnAttList (Self, ElemDef);
2678   -END;
2679   -
2680   -
2681   -PROCEDURE TCustomXmlScanner.WhenEntity (EntityDef : TEntityDef);
2682   - // Is called when the parser has parsed an <!ENTITY> definition
2683   - // inside the DTD
2684   -BEGIN
2685   - IF Assigned (FOnEntity) THEN FOnEntity (Self, EntityDef);
2686   -END;
2687   -
2688   -
2689   -PROCEDURE TCustomXmlScanner.WhenNotation (NotationDef : TNotationDef);
2690   - // Is called when the parser has parsed a <!NOTATION> definition
2691   - // inside the DTD
2692   -BEGIN
2693   - IF Assigned (FOnNotation) THEN FOnNotation (Self, NotationDef);
2694   -END;
2695   -
2696   -
2697   -PROCEDURE TCustomXmlScanner.WhenDtdError (ErrorPos : PChar);
2698   - // Is called when the parser has found an Error in the DTD
2699   -BEGIN
2700   - IF Assigned (FOnDtdError) THEN FOnDtdError (Self, ErrorPos);
2701   -END;
2702   -
2703   -
2704   -PROCEDURE TCustomXmlScanner.Execute;
2705   - // Perform scanning
2706   - // Scanning is done synchronously, i.e. you can expect events to be triggered
2707   - // in the order of the XML data stream. Execute will finish when the whole XML
2708   - // document has been scanned or when the StopParser property has been set to TRUE.
2709   -BEGIN
2710   - FStopParser := FALSE;
2711   - FXmlParser.StartScan;
2712   - WHILE FXmlParser.Scan AND (NOT FStopParser) DO
2713   - CASE FXmlParser.CurPartType OF
2714   - ptNone : ;
2715   - ptXmlProlog : WhenXmlProlog (FXmlParser.XmlVersion, FXmlParser.Encoding, FXmlParser.Standalone);
2716   - ptComment : WhenComment (StrSFPas (FXmlParser.CurStart, FXmlParser.CurFinal));
2717   - ptPI : WhenPI (FXmlParser.CurName, FXmlParser.CurContent, FXmlParser.CurAttr);
2718   - ptDtdc : WhenDtdRead (FXmlParser.RootName);
2719   - ptStartTag : WhenStartTag (FXmlParser.CurName, FXmlParser.CurAttr);
2720   - ptEmptyTag : WhenEmptyTag (FXmlParser.CurName, FXmlParser.CurAttr);
2721   - ptEndTag : WhenEndTag (FXmlParser.CurName);
2722   - ptContent : WhenContent (FXmlParser.CurContent);
2723   - ptCData : WhenCData (FXmlParser.CurContent);
2724   - END;
2725   -END;
2726   -
2727   -
2728   -END.
mapa/acesso.ddp
No preview for this file type
mapa/acesso.dfm
... ... @@ -1,309 +0,0 @@
1   -object frmAcesso: TfrmAcesso
2   - Left = 301
3   - Top = 147
4   - BorderIcons = []
5   - BorderStyle = bsSingle
6   - Caption =
7   - 'MapaCacic - M'#243'dulo Avulso para Coleta de Informa'#231#245'es Patrimoniai' +
8   - 's'
9   - ClientHeight = 284
10   - ClientWidth = 605
11   - Color = clBtnFace
12   - Font.Charset = DEFAULT_CHARSET
13   - Font.Color = clWindowText
14   - Font.Height = -11
15   - Font.Name = 'MS Sans Serif'
16   - Font.Style = []
17   - Icon.Data = {
18   - 0000010001003232000001000800E00F00001600000028000000320000006400
19   - 00000100080000000000B80B0000000000000000000000010000000000000000
20   - 0000FFFFFF006699FF0099FFFF0066FFFF000033FF00002BD70000156A001534
21   - 380065CA320063C6310052A529004B9625002C59160066CC330066CB330060C0
22   - 30005DBA2F0059B12D00376D1C004589240059B233001A350F003C77240054A8
23   - 370034672200234618001E3B150050A23C00478A37000F1E0C004F9940001223
24   - 0F00315D2A00152A1200539E4A003D7238002A5028001223130026462800438E
25   - 49000E1C10003F874B003A7E4600326D3D00101F130068BD7B00457C57006BC0
26   - 8A00294935006FC395000B16120012231D001B413500357B680074C7B0002851
27   - 47001B4239000E1B18006AB4AA007BD0C400183E3B000F2524007FD5D2008BE9
28   - E70088E4E30086E0DE00183E3E004FC8C8003D9A9A00193F3F001C4444001C41
29   - 41001F4545001E3B3B0097FDFD0095FAFA008EEEEE008CEBEB0087E2E20081D8
30   - D8005D9C9C003B63630098FEFE0093F5F50090F0F00079CACA006BB3B300416C
31   - 6C0047757500122E2F00235455006FBBBF004D8285004A7C7F0015353800538D
32   - 94003255590060A2A900416F76002B494D0050878E002C6D79001526290078CB
33   - D8004D8590001C30350031C4F60033CCFF0033CAFD0032C5F80031BFF10031B8
34   - EA0032B0E400296781001E36400032AADD0013354400508EAA004E89A3001E34
35   - 3E0033A1D50035A5DA005CA3C800369AD00030566A0061ACD5003892CA000409
36   - 0C00569BC600368BC2000E1A220027475D00223F55000B263D001D4F78003C89
37   - C500060C1100549BD5001F394E004F92CC00235A8E004388CD00285B99004688
38   - D6004989D200335E93001E324900030C180010315B0018315100071934003369
39   - B500020407003E7ED600152A4800080E17004F88D8004D85D300548DE1001444
40   - 96005A8EE9005C90EC000C131F005E92F000141F33001145AD00010204000305
41   - 09000E1625001B2A47000D1422000B111D00111A2C000F1727001E2E4D004A70
42   - BC003956910036528900273B63006598FE006395F9006295F7006192F4006090
43   - F1005E8EED005B8AE500517ACC004C73C000486CB500466AB1004264A7004162
44   - A4004060A1006597FD006496FA005E8DEB005D8BE9005A87E1005985DF005782
45   - DA00547ED2004E75C3004466AA003F5E9D00354F8400324B7D002C426E002A3F
46   - 690024365A0022335500203050001A2741003C5A95000A0F1A00162138002639
47   - 60004F76C6004567AD000E3288000F2B70000938B900040D2400184AD2000736
48   - C50002030600032BBF000837D7000629A7000032FE000031FD000031F9000031
49   - F5000030F100002FEB00002CDF000029D0000028C8000026BF000024B600001E
50   - 9800001D9300001A880000187D0000156C0000156B0000146400000E4900000A
51   - 3500000724000230E3000534E60000051D0001092D0000000100FFFFFF000000
52   - 0000F9FC00000000000000000000000000000000000000000000000000000000
53   - 00000000000000000000FC0000000000000000000000F6F60000000000000000
54   - 000000000000000000000000000000000000000000000000000000000000F0F8
55   - 000000000000000000FDE8E7F800000000000000000000000000000000000000
56   - 0000000000000000000000000000000000F705EBF900000000000000F9ED0505
57   - ECF9000000000000000000000000000000000000000000000000000000000000
58   - 00000000FDE90505F100000000000000F605050505F800000000000000000000
59   - 000000000000000000000000000000000000000000000000F7050505E5F80000
60   - 000000F9EA05050505F600000000000000000000000000000000000000000000
61   - 000000000000000000000000E4E5050505EE0000000000F705050505E5EE0000
62   - 00000000000000000000000000000000000000000000000000000000000000FD
63   - E905050505E5FD00000000A5DCEAE5E6EAEFDE00000000000000000000000000
64   - 00000000000000000000000000000000000000DEEDE8050506DCA30000008057
65   - 5096EBDB7D626A00000000000000000000000000000000000000000000000000
66   - 0000000000000064608BE2E2844E630000008356034D96840303640000000000
67   - 0000000000000000ABAEAEAEAE00000000000000000000000000005D034C9B85
68   - 4C036000000083500303424F0303630000000000000000ABA5CFD5BDBBC5B4B7
69   - C8BCC0CDAAA90000000000000000995703535655030362000000805703030303
70   - 03035E0000000000A9D7B1BA02020202020202020202020202B5BDD2AE000000
71   - 0000895C0303030303036300000000614B030303030364000000A3D3C6020202
72   - 02020202020202020202020202020202C3B1A900000000605303030303546A00
73   - 0000001E314F030303503300D6A5BB0202020202020202020202B70202020202
74   - 020202020202B8CFAB0000344D030353562720000000002012275603572720A3
75   - C102020202020202020202B9D5D2B3D1CFBD02020202020202020202C7A5001E
76   - 3150033B250B290000000080170A2531171433CAC3020202020202020202C7D3
77   - BCB40202C4D5B3B70202020202020202C2B7D4290B2138190F1A000000000000
78   - 2914091A091BB09F7C8E0202020202020202D3B9020202020202BBB302020202
79   - 020202B67F7FA2AE190E110E1020000000000000AD515959A226A19E716D7FB5
80   - 0202020202D9B10202020202020202CCBF0202020202A47C6C799DB720090E0F
81   - 1A000000000000AE5D593B5159B7717C9E746C7CA40202020202C20202020202
82   - 02020202B502020202A17A6C7C9D747A93190919330000000000AB5159BD5157
83   - 5159C36C7A9E796C79A10202020202020202020202020202020202029F716C7F
84   - 9D716D88B5261334A300000000006F6590D9BD513B5159B46C719E7C6C79A102
85   - 0202020202020202020202020202029D706D88916F6B88B402BD3A02CDAC0000
86   - 00006F6F6F9FBCBD513B5159026D7091828E0202020202020202020202020202
87   - 020202C288888E6B6F8E02020202020202CF00000000006F6F6E9F9ADA515751
88   - 59B46B74BA02020202020202020202020202020202020202029E6F7091020202
89   - 020202020202D3000000AEC26F6F029F9ABD51575159029D0202020202020202
90   - 02020202020202020202020202028E9D02020202020202020202C6AE0000A502
91   - 026F6D6F9FD9BD513B5159020202020202020202020202020202020202020202
92   - 020202020202020202020202020202D70000ADB4026F6F686E9FD9BD51575102
93   - 0202020202020202020202020202020202020202020202020202020202020202
94   - 020202AD000000C002026F6F6F027A9ABD513B59BAC8C9D9B0BDDABA02020202
95   - 020202BADABDB0D9C9C8BAB8B4020202020202020202BED6000000A3C002026F
96   - 6F6F6E9FD9BD3B5159B1CCBFBEBDBC020202020202020202BCBDBEBFCCB1B2CC
97   - B502020202020202B9D8AC00000000009CB802026F6F6C027A9A515751020202
98   - 02020202020202020202020202020202020202020202020202020202AA000000
99   - 00000000FED4BFB9026F6C6FA4BCBD5151510259595959595959595902020202
100   - 02020202020202020202020202C3CAD0E1000000000000000000FED6A5D20268
101   - 6EB9D951515159595959595959595959595902020202020202020202B9BBC1D0
102   - D4AB9900000000000000000000000000000000026F6F56513B5759595900320F
103   - 00000059595959C1B1CECFD8D2AAA5A9D6A80000000000000000000000000000
104   - 0000000000000000026F6F6F59595959000F0F0F000000000059595900000000
105   - 0000000000000000000000000000000000000000000000000000000000006F6F
106   - 5959590000000000000000000000595959000000000000000000000000000000
107   - 0000000000000000000000000000000000000059595906060606060606060606
108   - 0606065959590000000000000000000000000000000000000000000000000000
109   - 00000000000000595906060F0F0F060606060606060606065959000000000000
110   - 0000000000000000000000000000000000FD070707070707070759595906060F
111   - 0F06060606060606060606062E5959070707070707070707070707F4FC000000
112   - 0000000000F8EF06060606060606595959060F0F060606060606060606060606
113   - 0F5959060606060606060606060606F100000000000000000000945A08080808
114   - 0859590000000000000F0F0F0000000000000000005959080808080808080808
115   - 085F3E0000000000000000000000005A4404040404595932033204040F0F0404
116   - 040404040404040404595904040404040404040404455A000000000000000000
117   - 000000008646354748595905030332320F3204323204040404040404042F5949
118   - 4375393D49467535474A0000000000000000000000000000EE95175864595959
119   - 0503560F0F04323204040404040404042E59595E78F10D1651DEF11400570000
120   - 000000000000000000000000E8A0103762E65959050556033232320432043204
121   - 040415153259123F77E52B1D038FE91F1F0300000000000000000000000000EF
122   - 05E00A304CE3595959055603032E2E2E2E0505050505151559590F3250EA7211
123   - 42810536184B57000000000000000000000000EE05FA112E03DFDD5959055603
124   - 03012E2E2E0505050505153259E00E324DFA8D093C7B056615555C0000000000
125   - 00000000000000EE05E9152E03DFE0595959560303322E2E2E3205050505322E
126   - 59E009304CE38D0F377E057211415C000000000000000000000000EF05E00932
127   - 4EFBA60E59595903032E2E2E2E3205050505595959A60E3768E76615558C0536
128   - 184B570000000000000000000000000005A00A375C058711405959592E2E2E2E
129   - 2E05050559595959058712407B052A1C0398E81C230300000000000000000000
130   - 0000000006380C5669EB2C143F8D5959592E2E2E2E32595959593F65EB2C143F
131   - 92ED0B2442E4EF122F5600000000000000000000000000000700005800070000
132   - 5800000D5959595959595959000059000700005800000D005800000D00000000
133   - 000000000000F3FFFFFFFFF7C000F3FFFFFFFFF3C000E1FFFFFFFFE1C000C0FF
134   - FFFFFFC1C000C0FFFFFFFFC0C00080FFFFFFFFC0C00080FFFFFFFF804000807F
135   - FFFFFF804000007FFFFFFF804000007FFC1FFF804000007F8000FF004000007C
136   - 00001F0040008070000007804000804000000180400080000000008040008000
137   - 00000000C000C00000000000C000C00000000001C000800000000001C0000000
138   - 00000001C000000000000000C000000000000000C00080000000000040000000
139   - 0000000000000000000000000000000000000000000080000000000000008000
140   - 0000000040008000000000004000800000000000400080000000000040008000
141   - 00000000C000C00000000000C000C00000000000C000C00000000001C000E000
142   - 00000001C000E00000000001C000E00000000003C000F00000000007C000F800
143   - 00000007C000FC000000000FC000FC000000002FC000FC000000000FC000F800
144   - 00000007C000F80000000007C000F80000000007C000F80000000007C000FC00
145   - 0000000FC000FC000000000FC000FDAD8035B5BFC000}
146   - KeyPreview = True
147   - OldCreateOrder = False
148   - Position = poDesktopCenter
149   - OnActivate = FormActivate
150   - OnCreate = FormCreate
151   - OnKeyDown = FormKeyDown
152   - OnShow = FormShow
153   - PixelsPerInch = 96
154   - TextHeight = 13
155   - object lbNomeServidorWEB: TLabel
156   - Left = 0
157   - Top = 272
158   - Width = 300
159   - Height = 12
160   - AutoSize = False
161   - Caption = 'Servidor de Aplica'#231#227'o: ABCDEFGHIJKLMNOP'
162   - Font.Charset = DEFAULT_CHARSET
163   - Font.Color = clWindowText
164   - Font.Height = -9
165   - Font.Name = 'Arial'
166   - Font.Style = [fsBold]
167   - ParentFont = False
168   - end
169   - object lbVersao: TLabel
170   - Left = 303
171   - Top = 272
172   - Width = 300
173   - Height = 12
174   - Alignment = taRightJustify
175   - AutoSize = False
176   - Caption = 'Vers'#227'o: X.X.X.X'
177   - Font.Charset = DEFAULT_CHARSET
178   - Font.Color = clWindowText
179   - Font.Height = -9
180   - Font.Name = 'Arial'
181   - Font.Style = []
182   - ParentFont = False
183   - end
184   - object btAcesso: TButton
185   - Left = 174
186   - Top = 233
187   - Width = 100
188   - Height = 30
189   - Caption = 'Acessar'
190   - Default = True
191   - Enabled = False
192   - Font.Charset = DEFAULT_CHARSET
193   - Font.Color = clWindowText
194   - Font.Height = -13
195   - Font.Name = 'Arial'
196   - Font.Style = [fsBold]
197   - ParentFont = False
198   - TabOrder = 0
199   - OnClick = btAcessoClick
200   - end
201   - object btCancela: TButton
202   - Left = 330
203   - Top = 233
204   - Width = 100
205   - Height = 30
206   - Caption = 'Cancelar'
207   - Font.Charset = DEFAULT_CHARSET
208   - Font.Color = clWindowText
209   - Font.Height = -13
210   - Font.Name = 'Arial'
211   - Font.Style = [fsBold]
212   - ParentFont = False
213   - TabOrder = 1
214   - OnClick = btCancelaClick
215   - end
216   - object pnAcesso: TPanel
217   - Left = 2
218   - Top = 3
219   - Width = 602
220   - Height = 196
221   - BevelInner = bvRaised
222   - BevelOuter = bvLowered
223   - TabOrder = 2
224   - object lbNomeUsuarioAcesso: TLabel
225   - Left = 56
226   - Top = 39
227   - Width = 109
228   - Height = 16
229   - Caption = 'Nome de Usu'#225'rio:'
230   - Font.Charset = DEFAULT_CHARSET
231   - Font.Color = clWindowText
232   - Font.Height = -13
233   - Font.Name = 'MS Sans Serif'
234   - Font.Style = []
235   - ParentFont = False
236   - end
237   - object lbSenhaAcesso: TLabel
238   - Left = 394
239   - Top = 39
240   - Width = 110
241   - Height = 16
242   - Caption = 'Senha de Acesso:'
243   - Font.Charset = DEFAULT_CHARSET
244   - Font.Color = clWindowText
245   - Font.Height = -13
246   - Font.Name = 'MS Sans Serif'
247   - Font.Style = []
248   - ParentFont = False
249   - end
250   - object lbAviso: TLabel
251   - Left = 4
252   - Top = 121
253   - Width = 593
254   - Height = 13
255   - Alignment = taCenter
256   - AutoSize = False
257   - Caption =
258   - 'ATEN'#199#195'O: O usu'#225'rio deve estar cadastrado no Gerente WEB e deve t' +
259   - 'er acesso PRIM'#193'RIO ou SECUND'#193'RIO a este local'
260   - Font.Charset = DEFAULT_CHARSET
261   - Font.Color = clNavy
262   - Font.Height = -11
263   - Font.Name = 'MS Sans Serif'
264   - Font.Style = []
265   - ParentFont = False
266   - end
267   - object edNomeUsuarioAcesso: TEdit
268   - Left = 56
269   - Top = 55
270   - Width = 150
271   - Height = 21
272   - MaxLength = 20
273   - TabOrder = 0
274   - OnKeyUp = edNomeUsuarioAcessoKeyUp
275   - end
276   - object edSenhaAcesso: TEdit
277   - Left = 394
278   - Top = 55
279   - Width = 150
280   - Height = 21
281   - PasswordChar = #1
282   - TabOrder = 1
283   - OnKeyUp = edSenhaAcessoKeyUp
284   - end
285   - end
286   - object pnMensagens: TPanel
287   - Left = 1
288   - Top = 200
289   - Width = 602
290   - Height = 24
291   - BevelInner = bvLowered
292   - TabOrder = 3
293   - object lbMsg_Erro_Senha: TLabel
294   - Left = 3
295   - Top = 4
296   - Width = 589
297   - Height = 17
298   - Alignment = taCenter
299   - AutoSize = False
300   - end
301   - end
302   - object tm_Mensagem: TTimer
303   - Enabled = False
304   - Interval = 5000
305   - OnTimer = tm_MensagemTimer
306   - Left = 282
307   - Top = 241
308   - end
309   -end
mapa/acesso.pas
... ... @@ -1,249 +0,0 @@
1   -(**
2   ----------------------------------------------------------------------------------------------------------------------------------------------------------------
3   -Copyright 2000, 2001, 2002, 2003, 2004, 2005 Dataprev - Empresa de Tecnologia e Informações da Previdência Social, Brasil
4   -
5   -Este arquivo é parte do programa CACIC - Configurador Automático e Coletor de Informações Computacionais
6   -
7   -O CACIC é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como
8   -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença, ou (na sua opinião) qualquer versão.
9   -
10   -Este programa é distribuido na esperança que possa ser util, mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
11   -MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.
12   -
13   -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software
14   -Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
15   ----------------------------------------------------------------------------------------------------------------------------------------------------------------
16   -*)
17   -
18   -unit acesso;
19   -
20   -interface
21   -
22   -uses
23   - Windows,
24   - Messages,
25   - SysUtils,
26   - Variants,
27   - Classes,
28   - Graphics,
29   - Controls,
30   - Forms,
31   - StdCtrls,
32   - ExtCtrls,
33   - dialogs;
34   -
35   -type
36   - TfrmAcesso = class(TForm)
37   - btAcesso: TButton;
38   - btCancela: TButton;
39   - pnAcesso: TPanel;
40   - lbNomeUsuarioAcesso: TLabel;
41   - edNomeUsuarioAcesso: TEdit;
42   - lbSenhaAcesso: TLabel;
43   - edSenhaAcesso: TEdit;
44   - pnMensagens: TPanel;
45   - lbMsg_Erro_Senha: TLabel;
46   - lbAviso: TLabel;
47   - tm_Mensagem: TTimer;
48   - lbNomeServidorWEB: TLabel;
49   - lbVersao: TLabel;
50   - procedure btAcessoClick(Sender: TObject);
51   - procedure btCancelaClick(Sender: TObject);
52   - procedure FormCreate(Sender: TObject);
53   - procedure edNomeUsuarioAcessoKeyUp(Sender: TObject; var Key: Word;
54   - Shift: TShiftState);
55   - procedure FormShow(Sender: TObject);
56   - procedure edSenhaAcessoKeyUp(Sender: TObject; var Key: Word;
57   - Shift: TShiftState);
58   - procedure tm_MensagemTimer(Sender: TObject);
59   - procedure FormActivate(Sender: TObject);
60   - Procedure VerificaVersao;
61   - procedure FormKeyDown(Sender: TObject; var Key: Word;
62   - Shift: TShiftState);
63   - private
64   - { Private declarations }
65   - public
66   - { Public declarations }
67   - end;
68   -
69   -var
70   - frmAcesso: TfrmAcesso;
71   -
72   -implementation
73   -uses main_mapa;
74   -{$R *.dfm}
75   -
76   -procedure TfrmAcesso.btAcessoClick(Sender: TObject);
77   -var Request_mapa : TStringList;
78   - strRetorno,
79   - str_local_Aux : String;
80   -begin
81   - frmMapaCacic.boolAcessoOK := false;
82   - Request_mapa:=TStringList.Create;
83   -
84   - lbMsg_Erro_Senha.Caption := str_local_Aux;
85   -
86   - // Envio dos dados ao DataBase...
87   - Request_mapa.Values['nm_acesso'] := frmMapaCacic.g_oCacic.enCrypt(edNomeUsuarioAcesso.Text);
88   - Request_mapa.Values['te_senha'] := frmMapaCacic.g_oCacic.EnCrypt(edSenhaAcesso.Text);
89   - Request_mapa.Values['cs_MapaCacic'] := frmMapaCacic.g_oCacic.EnCrypt('S');
90   - Request_mapa.Values['te_operacao'] := frmMapaCacic.g_oCacic.EnCrypt('Autentication');
91   - Request_mapa.Values['te_versao_mapa'] := frmMapaCacic.g_oCacic.EnCrypt(frmMapaCacic.getVersionInfo(ParamStr(0)));
92   -
93   - strRetorno := frmMapaCacic.ComunicaServidor('mapa_acesso.php', Request_mapa, 'Autenticando o Acesso...');
94   - Request_mapa.free;
95   -
96   - if (frmMapaCacic.XML_RetornaValor('STATUS', strRetorno)='OK') then
97   - Begin
98   - str_local_Aux := trim(frmMapaCacic.g_oCacic.deCrypt(frmMapaCacic.XML_RetornaValor('ID_USUARIO',strRetorno)));
99   - if (str_local_Aux <> '') then
100   - Begin
101   - frmMapaCacic.strId_usuario := str_local_Aux;
102   - str_local_Aux := '';
103   - frmMapaCacic.boolAcessoOK := true; // Acesso OK!
104   - End
105   - else
106   - Begin
107   - str_local_Aux := 'Usuário/Senha incorretos ou Usuário sem Acesso Primário/Secundário a este local!';
108   - End
109   - End
110   - else
111   - Begin
112   - str_local_Aux := 'Problemas na comunicação!';
113   - End;
114   -
115   - lbMsg_Erro_Senha.Caption := str_local_Aux;
116   -
117   - if (frmMapaCacic.boolAcessoOK) then
118   - Begin
119   - lbAviso.Caption := 'USUÁRIO AUTENTICADO: "' + trim(frmMapaCacic.g_oCacic.deCrypt(frmMapaCacic.XML_RetornaValor('NM_USUARIO_COMPLETO',strRetorno)))+'"';
120   - lbAviso.Font.Style := [fsBold];
121   - lbAviso.Font.Color := clGreen;
122   - Application.ProcessMessages;
123   - Sleep(3000);
124   - End
125   - else
126   - lbMsg_Erro_Senha.Font.Color := clRed;
127   -
128   - tm_Mensagem.Enabled := true;
129   -
130   - frmMapaCacic.log_diario(str_local_Aux);
131   -
132   - Application.ProcessMessages;
133   -
134   - if (frmMapaCacic.boolAcessoOK) then
135   - self.Close
136   - else
137   - Begin
138   - edNomeUsuarioAcesso.AutoSelect := false;
139   - edNomeUsuarioAcesso.SetFocus;
140   - End;
141   -end;
142   -
143   -Procedure TfrmAcesso.VerificaVersao;
144   -var Request_mapa : TStringList;
145   - strRetorno,
146   - strAUX : String;
147   - boolVersaoOK : Boolean;
148   -begin
149   - boolVersaoOK := false;
150   - Request_mapa:=TStringList.Create;
151   -
152   - // Envio dos dados ao DataBase...
153   - Request_mapa.Values['cs_MapaCacic'] := frmMapaCacic.g_oCacic.EnCrypt('S');
154   - Request_mapa.Values['te_operacao'] := frmMapaCacic.g_oCacic.EnCrypt('Autentication');
155   - Request_mapa.Values['te_versao_mapa'] := frmMapaCacic.g_oCacic.EnCrypt(frmMapaCacic.getVersionInfo(ParamStr(0)));
156   -
157   - strRetorno := frmMapaCacic.ComunicaServidor('mapa_acesso.php', Request_mapa, 'Verificando Versão...');
158   - Request_mapa.free;
159   -
160   - if (frmMapaCacic.XML_RetornaValor('STATUS', strRetorno)='OK') then
161   - Begin
162   - strAUX := trim(frmMapaCacic.g_oCacic.deCrypt(frmMapaCacic.XML_RetornaValor('TE_VERSAO_MAPA',strRetorno)));
163   - if (strAUX = '') then
164   - boolVersaoOK := true
165   - else
166   - MessageDLG(#13#10#13#10+'ATENÇÃO! Foi disponibilizada a versão "'+strAUX+'".'+#13#10#13#10+'Acesse o gerente cacic na opção "Repositório" e baixe o programa "MapaCACIC"!'+#13#10,mtWarning,[mbOK],0);
167   - End
168   - else
169   - MessageDLG(#13#10#13#10+'ATENÇÃO! Há problema na comunicação com o módulo Gerente WEB.'+#13#10#13#10,mtWarning,[mbOK],0);
170   -end;
171   -
172   -
173   -procedure TfrmAcesso.btCancelaClick(Sender: TObject);
174   -begin
175   - lbMsg_Erro_Senha.Caption := 'Aguarde... Finalizando!';
176   - Application.ProcessMessages;
177   - Self.Close;
178   - boolFinalizar := true;
179   -end;
180   -
181   -procedure TfrmAcesso.FormCreate(Sender: TObject);
182   -begin
183   - intPausaPadrao := 3000; //(3 mil milisegundos = 3 segundos)
184   - frmAcesso.lbVersao.Caption := 'Versão: ' + frmMapaCacic.GetVersionInfo(ParamStr(0));
185   - frmMapaCacic.lbNomeServidorWEB.Caption := 'Servidor de Aplicação: '+frmMapaCacic.GetValorDatMemoria('Configs.EnderecoServidor', frmMapaCacic.tStringsMapaCACIC);
186   - frmMapaCacic.lbMensagens.Caption := 'Entrada de Dados para Autenticação no Módulo Gerente WEB Cacic';
187   - VerificaVersao;
188   -end;
189   -
190   -procedure TfrmAcesso.edNomeUsuarioAcessoKeyUp(Sender: TObject;
191   - var Key: Word; Shift: TShiftState);
192   -begin
193   - if not (trim(frmAcesso.edNomeUsuarioAcesso.Text) = '') and
194   - not (trim(frmAcesso.edSenhaAcesso.Text) = '') then
195   - frmAcesso.btAcesso.Enabled := true
196   - else
197   - frmAcesso.btAcesso.Enabled := false;
198   -end;
199   -
200   -procedure TfrmAcesso.FormShow(Sender: TObject);
201   -begin
202   - frmAcesso.edNomeUsuarioAcesso.SetFocus;
203   -end;
204   -
205   -procedure TfrmAcesso.edSenhaAcessoKeyUp(Sender: TObject; var Key: Word;
206   - Shift: TShiftState);
207   -begin
208   - if not (trim(frmAcesso.edNomeUsuarioAcesso.Text) = '') and
209   - not (trim(frmAcesso.edSenhaAcesso.Text) = '') then
210   - frmAcesso.btAcesso.Enabled := true
211   - else
212   - frmAcesso.btAcesso.Enabled := false;
213   -end;
214   -
215   -procedure TfrmAcesso.tm_MensagemTimer(Sender: TObject);
216   -begin
217   - tm_Mensagem.Enabled := false;
218   - lbMsg_Erro_Senha.Caption := '';
219   - lbMsg_Erro_Senha.Font.Color := clBlack;
220   -end;
221   -
222   -procedure TfrmAcesso.FormActivate(Sender: TObject);
223   -var strAux : String;
224   -begin
225   - strAux := 'Servidor de Aplicação: ' + frmMapaCacic.GetValorDatMemoria('Configs.EnderecoServidor', frmMapaCacic.tStringsMapaCACIC);
226   - if not (strAux = '') then
227   - Begin
228   - frmAcesso.lbNomeServidorWEB.Caption := strAux;
229   - End
230   - else
231   - Begin
232   - frmMapaCacic.Mensagem('Favor verificar a instalação do Cacic.' +#13#10 + 'Não Existe Servidor de Aplicação configurado!',true,intPausaPadrao);
233   - frmMapaCacic.Finalizar(true);
234   - End;
235   -end;
236   -
237   -procedure TfrmAcesso.FormKeyDown(Sender: TObject; var Key: Word;
238   - Shift: TShiftState);
239   -begin
240   - IF (key = VK_RETURN) then
241   - Begin
242   - if (edNomeUsuarioAcesso.Focused) and (trim(edNomeUsuarioAcesso.Text) <> '') then
243   - edSenhaAcesso.SetFocus
244   - else if (edSenhaAcesso.Focused) and (trim(edSenhaAcesso.Text) <> '') then
245   - btAcessoClick(nil);
246   - End;
247   -end;
248   -
249   -end.
mapa/main_mapa.ddp
No preview for this file type
mapa/main_mapa.dfm
... ... @@ -1,599 +0,0 @@
1   -object frmMapaCacic: TfrmMapaCacic
2   - Left = 211
3   - Top = 193
4   - BorderIcons = [biSystemMenu]
5   - BorderStyle = bsSingle
6   - Caption =
7   - 'MapaCacic - M'#243'dulo Avulso para Coleta de Informa'#231#245'es Patrimoniai' +
8   - 's'
9   - ClientHeight = 316
10   - ClientWidth = 782
11   - Color = clBtnFace
12   - Font.Charset = DEFAULT_CHARSET
13   - Font.Color = clWindowText
14   - Font.Height = -9
15   - Font.Name = 'MS Sans Serif'
16   - Font.Style = []
17   - Icon.Data = {
18   - 0000010001003232000001000800E00F00001600000028000000320000006400
19   - 00000100080000000000B80B0000000000000000000000010000000000000000
20   - 0000FFFFFF006699FF0099FFFF0066FFFF000033FF00002BD70000156A001534
21   - 380065CA320063C6310052A529004B9625002C59160066CC330066CB330060C0
22   - 30005DBA2F0059B12D00376D1C004589240059B233001A350F003C77240054A8
23   - 370034672200234618001E3B150050A23C00478A37000F1E0C004F9940001223
24   - 0F00315D2A00152A1200539E4A003D7238002A5028001223130026462800438E
25   - 49000E1C10003F874B003A7E4600326D3D00101F130068BD7B00457C57006BC0
26   - 8A00294935006FC395000B16120012231D001B413500357B680074C7B0002851
27   - 47001B4239000E1B18006AB4AA007BD0C400183E3B000F2524007FD5D2008BE9
28   - E70088E4E30086E0DE00183E3E004FC8C8003D9A9A00193F3F001C4444001C41
29   - 41001F4545001E3B3B0097FDFD0095FAFA008EEEEE008CEBEB0087E2E20081D8
30   - D8005D9C9C003B63630098FEFE0093F5F50090F0F00079CACA006BB3B300416C
31   - 6C0047757500122E2F00235455006FBBBF004D8285004A7C7F0015353800538D
32   - 94003255590060A2A900416F76002B494D0050878E002C6D79001526290078CB
33   - D8004D8590001C30350031C4F60033CCFF0033CAFD0032C5F80031BFF10031B8
34   - EA0032B0E400296781001E36400032AADD0013354400508EAA004E89A3001E34
35   - 3E0033A1D50035A5DA005CA3C800369AD00030566A0061ACD5003892CA000409
36   - 0C00569BC600368BC2000E1A220027475D00223F55000B263D001D4F78003C89
37   - C500060C1100549BD5001F394E004F92CC00235A8E004388CD00285B99004688
38   - D6004989D200335E93001E324900030C180010315B0018315100071934003369
39   - B500020407003E7ED600152A4800080E17004F88D8004D85D300548DE1001444
40   - 96005A8EE9005C90EC000C131F005E92F000141F33001145AD00010204000305
41   - 09000E1625001B2A47000D1422000B111D00111A2C000F1727001E2E4D004A70
42   - BC003956910036528900273B63006598FE006395F9006295F7006192F4006090
43   - F1005E8EED005B8AE500517ACC004C73C000486CB500466AB1004264A7004162
44   - A4004060A1006597FD006496FA005E8DEB005D8BE9005A87E1005985DF005782
45   - DA00547ED2004E75C3004466AA003F5E9D00354F8400324B7D002C426E002A3F
46   - 690024365A0022335500203050001A2741003C5A95000A0F1A00162138002639
47   - 60004F76C6004567AD000E3288000F2B70000938B900040D2400184AD2000736
48   - C50002030600032BBF000837D7000629A7000032FE000031FD000031F9000031
49   - F5000030F100002FEB00002CDF000029D0000028C8000026BF000024B600001E
50   - 9800001D9300001A880000187D0000156C0000156B0000146400000E4900000A
51   - 3500000724000230E3000534E60000051D0001092D0000000100FFFFFF000000
52   - 0000F9FC00000000000000000000000000000000000000000000000000000000
53   - 00000000000000000000FC0000000000000000000000F6F60000000000000000
54   - 000000000000000000000000000000000000000000000000000000000000F0F8
55   - 000000000000000000FDE8E7F800000000000000000000000000000000000000
56   - 0000000000000000000000000000000000F705EBF900000000000000F9ED0505
57   - ECF9000000000000000000000000000000000000000000000000000000000000
58   - 00000000FDE90505F100000000000000F605050505F800000000000000000000
59   - 000000000000000000000000000000000000000000000000F7050505E5F80000
60   - 000000F9EA05050505F600000000000000000000000000000000000000000000
61   - 000000000000000000000000E4E5050505EE0000000000F705050505E5EE0000
62   - 00000000000000000000000000000000000000000000000000000000000000FD
63   - E905050505E5FD00000000A5DCEAE5E6EAEFDE00000000000000000000000000
64   - 00000000000000000000000000000000000000DEEDE8050506DCA30000008057
65   - 5096EBDB7D626A00000000000000000000000000000000000000000000000000
66   - 0000000000000064608BE2E2844E630000008356034D96840303640000000000
67   - 0000000000000000ABAEAEAEAE00000000000000000000000000005D034C9B85
68   - 4C036000000083500303424F0303630000000000000000ABA5CFD5BDBBC5B4B7
69   - C8BCC0CDAAA90000000000000000995703535655030362000000805703030303
70   - 03035E0000000000A9D7B1BA02020202020202020202020202B5BDD2AE000000
71   - 0000895C0303030303036300000000614B030303030364000000A3D3C6020202
72   - 02020202020202020202020202020202C3B1A900000000605303030303546A00
73   - 0000001E314F030303503300D6A5BB0202020202020202020202B70202020202
74   - 020202020202B8CFAB0000344D030353562720000000002012275603572720A3
75   - C102020202020202020202B9D5D2B3D1CFBD02020202020202020202C7A5001E
76   - 3150033B250B290000000080170A2531171433CAC3020202020202020202C7D3
77   - BCB40202C4D5B3B70202020202020202C2B7D4290B2138190F1A000000000000
78   - 2914091A091BB09F7C8E0202020202020202D3B9020202020202BBB302020202
79   - 020202B67F7FA2AE190E110E1020000000000000AD515959A226A19E716D7FB5
80   - 0202020202D9B10202020202020202CCBF0202020202A47C6C799DB720090E0F
81   - 1A000000000000AE5D593B5159B7717C9E746C7CA40202020202C20202020202
82   - 02020202B502020202A17A6C7C9D747A93190919330000000000AB5159BD5157
83   - 5159C36C7A9E796C79A10202020202020202020202020202020202029F716C7F
84   - 9D716D88B5261334A300000000006F6590D9BD513B5159B46C719E7C6C79A102
85   - 0202020202020202020202020202029D706D88916F6B88B402BD3A02CDAC0000
86   - 00006F6F6F9FBCBD513B5159026D7091828E0202020202020202020202020202
87   - 020202C288888E6B6F8E02020202020202CF00000000006F6F6E9F9ADA515751
88   - 59B46B74BA02020202020202020202020202020202020202029E6F7091020202
89   - 020202020202D3000000AEC26F6F029F9ABD51575159029D0202020202020202
90   - 02020202020202020202020202028E9D02020202020202020202C6AE0000A502
91   - 026F6D6F9FD9BD513B5159020202020202020202020202020202020202020202
92   - 020202020202020202020202020202D70000ADB4026F6F686E9FD9BD51575102
93   - 0202020202020202020202020202020202020202020202020202020202020202
94   - 020202AD000000C002026F6F6F027A9ABD513B59BAC8C9D9B0BDDABA02020202
95   - 020202BADABDB0D9C9C8BAB8B4020202020202020202BED6000000A3C002026F
96   - 6F6F6E9FD9BD3B5159B1CCBFBEBDBC020202020202020202BCBDBEBFCCB1B2CC
97   - B502020202020202B9D8AC00000000009CB802026F6F6C027A9A515751020202
98   - 02020202020202020202020202020202020202020202020202020202AA000000
99   - 00000000FED4BFB9026F6C6FA4BCBD5151510259595959595959595902020202
100   - 02020202020202020202020202C3CAD0E1000000000000000000FED6A5D20268
101   - 6EB9D951515159595959595959595959595902020202020202020202B9BBC1D0
102   - D4AB9900000000000000000000000000000000026F6F56513B5759595900320F
103   - 00000059595959C1B1CECFD8D2AAA5A9D6A80000000000000000000000000000
104   - 0000000000000000026F6F6F59595959000F0F0F000000000059595900000000
105   - 0000000000000000000000000000000000000000000000000000000000006F6F
106   - 5959590000000000000000000000595959000000000000000000000000000000
107   - 0000000000000000000000000000000000000059595906060606060606060606
108   - 0606065959590000000000000000000000000000000000000000000000000000
109   - 00000000000000595906060F0F0F060606060606060606065959000000000000
110   - 0000000000000000000000000000000000FD070707070707070759595906060F
111   - 0F06060606060606060606062E5959070707070707070707070707F4FC000000
112   - 0000000000F8EF06060606060606595959060F0F060606060606060606060606
113   - 0F5959060606060606060606060606F100000000000000000000945A08080808
114   - 0859590000000000000F0F0F0000000000000000005959080808080808080808
115   - 085F3E0000000000000000000000005A4404040404595932033204040F0F0404
116   - 040404040404040404595904040404040404040404455A000000000000000000
117   - 000000008646354748595905030332320F3204323204040404040404042F5949
118   - 4375393D49467535474A0000000000000000000000000000EE95175864595959
119   - 0503560F0F04323204040404040404042E59595E78F10D1651DEF11400570000
120   - 000000000000000000000000E8A0103762E65959050556033232320432043204
121   - 040415153259123F77E52B1D038FE91F1F0300000000000000000000000000EF
122   - 05E00A304CE3595959055603032E2E2E2E0505050505151559590F3250EA7211
123   - 42810536184B57000000000000000000000000EE05FA112E03DFDD5959055603
124   - 03012E2E2E0505050505153259E00E324DFA8D093C7B056615555C0000000000
125   - 00000000000000EE05E9152E03DFE0595959560303322E2E2E3205050505322E
126   - 59E009304CE38D0F377E057211415C000000000000000000000000EF05E00932
127   - 4EFBA60E59595903032E2E2E2E3205050505595959A60E3768E76615558C0536
128   - 184B570000000000000000000000000005A00A375C058711405959592E2E2E2E
129   - 2E05050559595959058712407B052A1C0398E81C230300000000000000000000
130   - 0000000006380C5669EB2C143F8D5959592E2E2E2E32595959593F65EB2C143F
131   - 92ED0B2442E4EF122F5600000000000000000000000000000700005800070000
132   - 5800000D5959595959595959000059000700005800000D005800000D00000000
133   - 000000000000F3FFFFFFFFF7C000F3FFFFFFFFF3C000E1FFFFFFFFE1C000C0FF
134   - FFFFFFC1C000C0FFFFFFFFC0C00080FFFFFFFFC0C00080FFFFFFFF804000807F
135   - FFFFFF804000007FFFFFFF804000007FFC1FFF804000007F8000FF004000007C
136   - 00001F0040008070000007804000804000000180400080000000008040008000
137   - 00000000C000C00000000000C000C00000000001C000800000000001C0000000
138   - 00000001C000000000000000C000000000000000C00080000000000040000000
139   - 0000000000000000000000000000000000000000000080000000000000008000
140   - 0000000040008000000000004000800000000000400080000000000040008000
141   - 00000000C000C00000000000C000C00000000000C000C00000000001C000E000
142   - 00000001C000E00000000001C000E00000000003C000F00000000007C000F800
143   - 00000007C000FC000000000FC000FC000000002FC000FC000000000FC000F800
144   - 00000007C000F80000000007C000F80000000007C000F80000000007C000FC00
145   - 0000000FC000FC000000000FC000FDAD8035B5BFC000}
146   - OldCreateOrder = False
147   - Position = poDesktopCenter
148   - Visible = True
149   - OnActivate = FormActivate
150   - OnClose = FormClose
151   - OnCreate = FormCreate
152   - PixelsPerInch = 96
153   - TextHeight = 13
154   - object lbNomeServidorWEB: TLabel
155   - Left = 0
156   - Top = 303
157   - Width = 390
158   - Height = 12
159   - AutoSize = False
160   - Font.Charset = DEFAULT_CHARSET
161   - Font.Color = clWindowText
162   - Font.Height = -9
163   - Font.Name = 'Arial'
164   - Font.Style = [fsBold]
165   - ParentFont = False
166   - end
167   - object lbVersao: TLabel
168   - Left = 389
169   - Top = 303
170   - Width = 390
171   - Height = 12
172   - Alignment = taRightJustify
173   - AutoSize = False
174   - Caption = 'v: X.X.X.X'
175   - Font.Charset = DEFAULT_CHARSET
176   - Font.Color = clWindowText
177   - Font.Height = -9
178   - Font.Name = 'Arial'
179   - Font.Style = []
180   - ParentFont = False
181   - end
182   - object gbLeiaComAtencao: TGroupBox
183   - Left = 1
184   - Top = -1
185   - Width = 780
186   - Height = 53
187   - Caption = ' Leia com aten'#231#227'o '
188   - Color = clBtnFace
189   - Font.Charset = DEFAULT_CHARSET
190   - Font.Color = clRed
191   - Font.Height = -13
192   - Font.Name = 'MS Sans Serif'
193   - Font.Style = [fsBold]
194   - ParentColor = False
195   - ParentFont = False
196   - TabOrder = 0
197   - Visible = False
198   - object lbLeiaComAtencao: TLabel
199   - Left = 5
200   - Top = 14
201   - Width = 769
202   - Height = 32
203   - AutoSize = False
204   - Caption =
205   - 'O preenchimento correto dos campos abaixo '#233' de extrema import'#226'nc' +
206   - 'ia para um efetivo controle patrimonial e de localiza'#231#227'o de equi' +
207   - 'pamentos.'
208   - Font.Charset = DEFAULT_CHARSET
209   - Font.Color = clBlack
210   - Font.Height = -13
211   - Font.Name = 'MS Sans Serif'
212   - Font.Style = []
213   - ParentFont = False
214   - WordWrap = True
215   - end
216   - end
217   - object gbInformacoesSobreComputador: TGroupBox
218   - Left = 1
219   - Top = 61
220   - Width = 780
221   - Height = 151
222   - Caption =
223   - 'Informa'#231#245'es sobre localiza'#231#227'o f'#237'sica e patrimonial deste computa' +
224   - 'dor'
225   - Font.Charset = DEFAULT_CHARSET
226   - Font.Color = clBlue
227   - Font.Height = -11
228   - Font.Name = 'MS Sans Serif'
229   - Font.Style = [fsBold]
230   - ParentFont = False
231   - TabOrder = 1
232   - Visible = False
233   - object lbEtiqueta1: TLabel
234   - Left = 3
235   - Top = 15
236   - Width = 48
237   - Height = 13
238   - Caption = 'Etiqueta 1'
239   - Font.Charset = DEFAULT_CHARSET
240   - Font.Color = clWindowText
241   - Font.Height = -11
242   - Font.Name = 'MS Sans Serif'
243   - Font.Style = []
244   - ParentFont = False
245   - Visible = False
246   - end
247   - object lbEtiqueta2: TLabel
248   - Left = 3
249   - Top = 105
250   - Width = 48
251   - Height = 13
252   - Caption = 'Etiqueta 2'
253   - Font.Charset = DEFAULT_CHARSET
254   - Font.Color = clWindowText
255   - Font.Height = -11
256   - Font.Name = 'MS Sans Serif'
257   - Font.Style = []
258   - ParentFont = False
259   - Visible = False
260   - end
261   - object lbEtiqueta3: TLabel
262   - Left = 341
263   - Top = 15
264   - Width = 48
265   - Height = 13
266   - Caption = 'Etiqueta 3'
267   - Font.Charset = DEFAULT_CHARSET
268   - Font.Color = clWindowText
269   - Font.Height = -11
270   - Font.Name = 'MS Sans Serif'
271   - Font.Style = []
272   - ParentFont = False
273   - Visible = False
274   - end
275   - object lbEtiqueta4: TLabel
276   - Left = 341
277   - Top = 60
278   - Width = 48
279   - Height = 13
280   - Caption = 'Etiqueta 4'
281   - Font.Charset = DEFAULT_CHARSET
282   - Font.Color = clWindowText
283   - Font.Height = -11
284   - Font.Name = 'MS Sans Serif'
285   - Font.Style = []
286   - ParentFont = False
287   - Visible = False
288   - end
289   - object lbEtiqueta5: TLabel
290   - Left = 493
291   - Top = 60
292   - Width = 48
293   - Height = 13
294   - Caption = 'Etiqueta 5'
295   - Font.Charset = DEFAULT_CHARSET
296   - Font.Color = clWindowText
297   - Font.Height = -11
298   - Font.Name = 'MS Sans Serif'
299   - Font.Style = []
300   - ParentFont = False
301   - Visible = False
302   - end
303   - object lbEtiqueta6: TLabel
304   - Left = 645
305   - Top = 60
306   - Width = 48
307   - Height = 13
308   - Caption = 'Etiqueta 6'
309   - Font.Charset = DEFAULT_CHARSET
310   - Font.Color = clWindowText
311   - Font.Height = -11
312   - Font.Name = 'MS Sans Serif'
313   - Font.Style = []
314   - ParentFont = False
315   - Visible = False
316   - end
317   - object lbEtiqueta7: TLabel
318   - Left = 341
319   - Top = 105
320   - Width = 48
321   - Height = 13
322   - Caption = 'Etiqueta 7'
323   - Font.Charset = DEFAULT_CHARSET
324   - Font.Color = clWindowText
325   - Font.Height = -11
326   - Font.Name = 'MS Sans Serif'
327   - Font.Style = []
328   - ParentFont = False
329   - Visible = False
330   - end
331   - object lbEtiqueta8: TLabel
332   - Left = 493
333   - Top = 105
334   - Width = 48
335   - Height = 13
336   - Caption = 'Etiqueta 8'
337   - Font.Charset = DEFAULT_CHARSET
338   - Font.Color = clWindowText
339   - Font.Height = -11
340   - Font.Name = 'MS Sans Serif'
341   - Font.Style = []
342   - ParentFont = False
343   - Visible = False
344   - end
345   - object lbEtiqueta9: TLabel
346   - Left = 645
347   - Top = 105
348   - Width = 48
349   - Height = 13
350   - Caption = 'Etiqueta 9'
351   - Font.Charset = DEFAULT_CHARSET
352   - Font.Color = clWindowText
353   - Font.Height = -11
354   - Font.Name = 'MS Sans Serif'
355   - Font.Style = []
356   - ParentFont = False
357   - Visible = False
358   - end
359   - object lbEtiqueta1a: TLabel
360   - Left = 3
361   - Top = 60
362   - Width = 54
363   - Height = 13
364   - Caption = 'Etiqueta 1a'
365   - Font.Charset = DEFAULT_CHARSET
366   - Font.Color = clWindowText
367   - Font.Height = -11
368   - Font.Name = 'MS Sans Serif'
369   - Font.Style = []
370   - ParentFont = False
371   - Visible = False
372   - end
373   - object cb_id_unid_organizacional_nivel1: TComboBox
374   - Left = 3
375   - Top = 30
376   - Width = 325
377   - Height = 21
378   - Hint = 'Esse '#233' o texto de ajuda da "Etiqueta 1"'
379   - Style = csDropDownList
380   - Font.Charset = DEFAULT_CHARSET
381   - Font.Color = clWindowText
382   - Font.Height = -11
383   - Font.Name = 'MS Sans Serif'
384   - Font.Style = []
385   - ItemHeight = 13
386   - ParentFont = False
387   - ParentShowHint = False
388   - ShowHint = True
389   - TabOrder = 0
390   - Visible = False
391   - OnChange = cb_id_unid_organizacional_nivel1Change
392   - end
393   - object cb_id_unid_organizacional_nivel2: TComboBox
394   - Left = 3
395   - Top = 120
396   - Width = 325
397   - Height = 21
398   - Style = csDropDownList
399   - Enabled = False
400   - Font.Charset = DEFAULT_CHARSET
401   - Font.Color = clWindowText
402   - Font.Height = -11
403   - Font.Name = 'MS Sans Serif'
404   - Font.Style = []
405   - ItemHeight = 13
406   - ParentFont = False
407   - ParentShowHint = False
408   - ShowHint = True
409   - TabOrder = 1
410   - Visible = False
411   - end
412   - object ed_te_localizacao_complementar: TEdit
413   - Left = 341
414   - Top = 30
415   - Width = 434
416   - Height = 22
417   - Font.Charset = DEFAULT_CHARSET
418   - Font.Color = clWindowText
419   - Font.Height = -11
420   - Font.Name = 'Arial'
421   - Font.Style = []
422   - MaxLength = 100
423   - ParentFont = False
424   - ParentShowHint = False
425   - ShowHint = True
426   - TabOrder = 2
427   - Visible = False
428   - end
429   - object ed_te_info_patrimonio3: TEdit
430   - Left = 645
431   - Top = 75
432   - Width = 130
433   - Height = 21
434   - Font.Charset = DEFAULT_CHARSET
435   - Font.Color = clWindowText
436   - Font.Height = -11
437   - Font.Name = 'MS Sans Serif'
438   - Font.Style = []
439   - MaxLength = 20
440   - ParentFont = False
441   - ParentShowHint = False
442   - ShowHint = True
443   - TabOrder = 5
444   - Visible = False
445   - end
446   - object ed_te_info_patrimonio1: TEdit
447   - Left = 341
448   - Top = 75
449   - Width = 130
450   - Height = 21
451   - Font.Charset = DEFAULT_CHARSET
452   - Font.Color = clWindowText
453   - Font.Height = -11
454   - Font.Name = 'MS Sans Serif'
455   - Font.Style = []
456   - MaxLength = 20
457   - ParentFont = False
458   - ParentShowHint = False
459   - ShowHint = True
460   - TabOrder = 3
461   - Visible = False
462   - end
463   - object ed_te_info_patrimonio2: TEdit
464   - Left = 493
465   - Top = 75
466   - Width = 130
467   - Height = 21
468   - Font.Charset = DEFAULT_CHARSET
469   - Font.Color = clWindowText
470   - Font.Height = -11
471   - Font.Name = 'MS Sans Serif'
472   - Font.Style = []
473   - MaxLength = 20
474   - ParentFont = False
475   - ParentShowHint = False
476   - ShowHint = True
477   - TabOrder = 4
478   - Visible = False
479   - end
480   - object ed_te_info_patrimonio6: TEdit
481   - Left = 645
482   - Top = 120
483   - Width = 130
484   - Height = 21
485   - Font.Charset = DEFAULT_CHARSET
486   - Font.Color = clWindowText
487   - Font.Height = -11
488   - Font.Name = 'MS Sans Serif'
489   - Font.Style = []
490   - MaxLength = 20
491   - ParentFont = False
492   - ParentShowHint = False
493   - ShowHint = True
494   - TabOrder = 8
495   - Visible = False
496   - end
497   - object ed_te_info_patrimonio4: TEdit
498   - Left = 341
499   - Top = 120
500   - Width = 130
501   - Height = 21
502   - Font.Charset = DEFAULT_CHARSET
503   - Font.Color = clWindowText
504   - Font.Height = -11
505   - Font.Name = 'MS Sans Serif'
506   - Font.Style = []
507   - MaxLength = 20
508   - ParentFont = False
509   - ParentShowHint = False
510   - ShowHint = True
511   - TabOrder = 6
512   - Visible = False
513   - end
514   - object ed_te_info_patrimonio5: TEdit
515   - Left = 493
516   - Top = 120
517   - Width = 130
518   - Height = 21
519   - Font.Charset = DEFAULT_CHARSET
520   - Font.Color = clWindowText
521   - Font.Height = -11
522   - Font.Name = 'MS Sans Serif'
523   - Font.Style = []
524   - MaxLength = 20
525   - ParentFont = False
526   - ParentShowHint = False
527   - ShowHint = True
528   - TabOrder = 7
529   - Visible = False
530   - end
531   - object cb_id_unid_organizacional_nivel1a: TComboBox
532   - Left = 3
533   - Top = 75
534   - Width = 325
535   - Height = 22
536   - Style = csDropDownList
537   - Enabled = False
538   - Font.Charset = DEFAULT_CHARSET
539   - Font.Color = clWindowText
540   - Font.Height = -11
541   - Font.Name = 'Arial'
542   - Font.Style = []
543   - ItemHeight = 14
544   - ParentFont = False
545   - ParentShowHint = False
546   - ShowHint = True
547   - TabOrder = 9
548   - Visible = False
549   - OnChange = cb_id_unid_organizacional_nivel1aChange
550   - end
551   - object Panel1: TPanel
552   - Left = 333
553   - Top = 16
554   - Width = 2
555   - Height = 125
556   - Caption = 'Panel1'
557   - TabOrder = 10
558   - end
559   - end
560   - object btGravarInformacoes: TButton
561   - Left = 251
562   - Top = 254
563   - Width = 275
564   - Height = 30
565   - Caption = 'Grava e Envia Informa'#231#245'es Patrimoniais'
566   - Font.Charset = DEFAULT_CHARSET
567   - Font.Color = clWindowText
568   - Font.Height = -13
569   - Font.Name = 'Arial'
570   - Font.Style = [fsBold]
571   - ParentFont = False
572   - TabOrder = 2
573   - Visible = False
574   - OnClick = AtualizaPatrimonio
575   - end
576   - object pnMensagens: TPanel
577   - Left = 1
578   - Top = 212
579   - Width = 779
580   - Height = 22
581   - BevelInner = bvLowered
582   - TabOrder = 3
583   - object lbMensagens: TLabel
584   - Left = 2
585   - Top = 2
586   - Width = 775
587   - Height = 18
588   - Align = alClient
589   - Alignment = taCenter
590   - AutoSize = False
591   - Font.Charset = DEFAULT_CHARSET
592   - Font.Color = clWindowText
593   - Font.Height = -13
594   - Font.Name = 'MS Sans Serif'
595   - Font.Style = []
596   - ParentFont = False
597   - end
598   - end
599   -end
mapa/main_mapa.pas
... ... @@ -1,1577 +0,0 @@
1   -(**
2   ----------------------------------------------------------------------------------------------------------------------------------------------------------------
3   -Copyright 2000, 2001, 2002, 2003, 2004, 2005 Dataprev - Empresa de Tecnologia e Informações da Previdência Social, Brasil
4   -
5   -Este arquivo é parte do programa CACIC - Configurador Automático e Coletor de Informações Computacionais
6   -
7   -O CACIC é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como
8   -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença, ou (na sua opinião) qualquer versão.
9   -
10   -Este programa é distribuido na esperança que possa ser util, mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
11   -MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.
12   -
13   -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software
14   -Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
15   ----------------------------------------------------------------------------------------------------------------------------------------------------------------
16   -*)
17   -
18   -unit main_mapa;
19   -
20   -interface
21   -
22   -uses
23   - IniFiles,
24   - Windows,
25   - Sysutils, // Deve ser colocado após o Windows acima, nunca antes
26   - strutils,
27   - Registry,
28   - LibXmlParser,
29   - XML,
30   - IdTCPConnection,
31   - IdTCPClient,
32   - IdHTTP,
33   - IdBaseComponent,
34   - IdComponent,
35   - WinSock,
36   - NB30,
37   - StdCtrls,
38   - Controls,
39   - Classes,
40   - Forms,
41   - PJVersionInfo,
42   - ExtCtrls,
43   - Graphics,
44   - Dialogs,
45   - CACIC_Library;
46   -
47   -var
48   - strCipherClosed,
49   - strCipherOpened : string;
50   -
51   -var
52   - intPausaPadrao : integer;
53   -
54   -var v_Aguarde : TextFile;
55   -
56   -var
57   - boolDebugs,
58   - boolFinalizar : boolean;
59   -
60   -type
61   - TfrmMapaCacic = class(TForm)
62   - gbLeiaComAtencao: TGroupBox;
63   - lbLeiaComAtencao: TLabel;
64   - gbInformacoesSobreComputador: TGroupBox;
65   - lbEtiqueta1: TLabel;
66   - lbEtiqueta2: TLabel;
67   - lbEtiqueta3: TLabel;
68   - cb_id_unid_organizacional_nivel1: TComboBox;
69   - cb_id_unid_organizacional_nivel2: TComboBox;
70   - ed_te_localizacao_complementar: TEdit;
71   - btGravarInformacoes: TButton;
72   - lbEtiqueta4: TLabel;
73   - lbEtiqueta5: TLabel;
74   - lbEtiqueta6: TLabel;
75   - lbEtiqueta7: TLabel;
76   - lbEtiqueta8: TLabel;
77   - lbEtiqueta9: TLabel;
78   - ed_te_info_patrimonio1: TEdit;
79   - ed_te_info_patrimonio2: TEdit;
80   - ed_te_info_patrimonio3: TEdit;
81   - ed_te_info_patrimonio4: TEdit;
82   - ed_te_info_patrimonio5: TEdit;
83   - ed_te_info_patrimonio6: TEdit;
84   - pnMensagens: TPanel;
85   - lbMensagens: TLabel;
86   - lbEtiqueta1a: TLabel;
87   - cb_id_unid_organizacional_nivel1a: TComboBox;
88   - Panel1: TPanel;
89   - lbNomeServidorWEB: TLabel;
90   - lbVersao: TLabel;
91   -
92   - procedure mapa;
93   - function SetValorChaveRegEdit(Chave: String; Dado: Variant): Variant;
94   - function GetValorChaveRegEdit(Chave: String): Variant;
95   - function GetRootKey(strRootKey: String): HKEY;
96   - Function RemoveCaracteresEspeciais(Texto, p_Fill : String; p_start, p_end:integer) : String;
97   - Procedure CipherClose(p_DatFileName : string; p_tstrCipherOpened : TStrings);
98   - Procedure CipherOpen(p_DatFileName : string; var p_tstrCipherOpened : TStrings);
99   - Function GetValorDatMemoria(p_Chave : String; p_tstrCipherOpened : TStrings) : String;
100   - procedure MontaCombos(p_strConfigs : String);
101   - procedure MontaInterface(p_strConfigs : String);
102   - procedure FormClose(Sender: TObject; var Action: TCloseAction);
103   - procedure cb_id_unid_organizacional_nivel1Change(Sender: TObject);
104   - procedure AtualizaPatrimonio(Sender: TObject);
105   - procedure RecuperaValoresAnteriores(p_strConfigs : String);
106   - procedure log_diario(strMsg : String);
107   - procedure log_DEBUG(p_msg:string);
108   - Procedure SetValorDatMemoria(p_Chave : string; p_Valor : String; p_tstrCipherOpened : TStrings);
109   - function GetVersionInfo(p_File: string):string;
110   - function VerFmt(const MS, LS: DWORD): string;
111   - function GetFolderDate(Folder: string): TDateTime;
112   - procedure CriaFormSenha(Sender: TObject);
113   - Function ComunicaServidor(URL : String; Request : TStringList; MsgAcao: String) : String;
114   - Function XML_RetornaValor(Tag : String; Fonte : String): String;
115   - function Parse(p_ClassName, p_SectionName, p_DataName:string; p_Report : TStringList) : String;
116   - procedure Matar(v_dir,v_files: string);
117   - procedure Finalizar(p_pausa:boolean);
118   - procedure Apaga_Temps;
119   - procedure Sair;
120   - function LastPos(SubStr, S: string): Integer;
121   - Function Rat(OQue: String; Onde: String) : Integer;
122   - Function RemoveZerosFimString(Texto : String) : String;
123   - function GetValorChaveRegIni(p_SectionName, p_KeyName, p_IniFileName : String) : String;
124   - Function RetornaValorVetorUON1(id1 : string) : String;
125   - Function RetornaValorVetorUON1a(id1a : string) : String;
126   - Function RetornaValorVetorUON2(id2,idLocal : string) : String;
127   - function LetrasDrives: string;
128   - function SearchFile(p_Drive,p_File:string) : boolean;
129   - procedure GetSubDirs(Folder:string; sList:TStringList);
130   - procedure Mensagem(p_strMsg : String; p_boolAlerta : boolean; p_intPausaSegundos : integer);
131   - procedure cb_id_unid_organizacional_nivel1aChange(Sender: TObject);
132   - procedure FormActivate(Sender: TObject);
133   - procedure FormCreate(Sender: TObject);
134   - private
135   - strId_unid_organizacional_nivel1,
136   - strId_unid_organizacional_nivel1a,
137   - strId_unid_organizacional_nivel2,
138   - strId_Local,
139   - strTe_localizacao_complementar,
140   - strTe_info_patrimonio1,
141   - strTe_info_patrimonio2,
142   - strTe_info_patrimonio3,
143   - strTe_info_patrimonio4,
144   - strTe_info_patrimonio5,
145   - strTe_info_patrimonio6 : String;
146   - public
147   - boolAcessoOK : boolean;
148   - strId_usuario : String;
149   - g_oCacic : TCACIC;
150   - tStringsCACIC,
151   - tStringsMapaCACIC : TStrings;
152   - end;
153   -
154   -var
155   - frmMapaCacic: TfrmMapaCacic;
156   -
157   -implementation
158   -
159   -uses acesso, Math;
160   -
161   -{$R *.dfm}
162   -
163   -
164   -// Estruturas de dados para armazenar os itens da uon1 e uon2
165   -type
166   - TRegistroUON1 = record
167   - id1 : String;
168   - nm1 : String;
169   - end;
170   - TVetorUON1 = array of TRegistroUON1;
171   -
172   - TRegistroUON1a = record
173   - id1 : String;
174   - id1a : String;
175   - nm1a : String;
176   - id_local: String;
177   - end;
178   -
179   - TVetorUON1a = array of TRegistroUON1a;
180   -
181   - TRegistroUON2 = record
182   - id1a : String;
183   - id2 : String;
184   - nm2 : String;
185   - id_local: String;
186   - end;
187   - TVetorUON2 = array of TRegistroUON2;
188   -
189   -var VetorUON1 : TVetorUON1;
190   - VetorUON1a : TVetorUON1a;
191   - VetorUON2 : TVetorUON2;
192   -
193   - // Esse array é usado apenas para saber a uon1a, após a filtragem pelo uon1
194   - VetorUON1aFiltrado : array of String;
195   -
196   - // Esse array é usado apenas para saber a uon2, após a filtragem pelo uon1a
197   - VetorUON2Filtrado : array of String;
198   -
199   -// Baixada de http://www.geocities.com/SiliconValley/Bay/1058/fdelphi.html
200   -Function TfrmMapaCacic.Rat(OQue: String; Onde: String) : Integer;
201   -// Procura uma string dentro de outra, da direita para esquerda
202   -// Retorna a posição onde foi encontrada ou 0 caso não seja encontrada
203   -var
204   -Pos : Integer;
205   -Tam1 : Integer;
206   -Tam2 : Integer;
207   -Achou : Boolean;
208   -begin
209   -Tam1 := Length(OQue);
210   -Tam2 := Length(Onde);
211   -Pos := Tam2-Tam1+1;
212   -Achou := False;
213   -while (Pos >= 1) and not Achou do
214   - begin
215   - if Copy(Onde, Pos, Tam1) = OQue then
216   - begin
217   - Achou := True
218   - end
219   - else
220   - begin
221   - Pos := Pos - 1;
222   - end;
223   - end;
224   -Result := Pos;
225   -end;
226   -
227   -procedure TfrmMapaCacic.Mensagem(p_strMsg : String; p_boolAlerta : boolean; p_intPausaSegundos : integer);
228   -Begin
229   - log_DEBUG(p_strMsg);
230   - if p_boolAlerta then
231   - lbMensagens.Font.Color := clRed
232   - else
233   - lbMensagens.Font.Color := clBlack;
234   -
235   - lbMensagens.Caption := p_strMsg;
236   - log_diario(lbMensagens.Caption);
237   - Application.ProcessMessages;
238   - if (p_intPausaSegundos > 0) then
239   - sleep(p_intPausaSegundos);
240   -End;
241   -
242   -procedure TfrmMapaCacic.log_diario(strMsg : String);
243   -var
244   - HistoricoLog : TextFile;
245   - strDataArqLocal, strDataAtual : string;
246   -begin
247   - try
248   - FileSetAttr (g_oCacic.getCacicPath + 'MapaCacic.log',0); // Retira os atributos do arquivo para evitar o erro FILE ACCESS DENIED em máquinas 2000
249   - AssignFile(HistoricoLog,g_oCacic.getCacicPath + 'MapaCacic.log'); {Associa o arquivo a uma variável do tipo TextFile}
250   - {$IOChecks off}
251   - Reset(HistoricoLog); {Abre o arquivo texto}
252   - {$IOChecks on}
253   - if (IOResult <> 0) then // Arquivo não existe, será recriado.
254   - begin
255   - Rewrite (HistoricoLog);
256   - Append(HistoricoLog);
257   - Writeln(HistoricoLog,FormatDateTime('dd/mm hh:nn:ss : ', Now) + '======================> Iniciando o Log <=======================');
258   - end;
259   - DateTimeToString(strDataArqLocal, 'yyyymmdd', FileDateToDateTime(Fileage(g_oCacic.getCacicPath + 'MapaCacic.log')));
260   - DateTimeToString(strDataAtual , 'yyyymmdd', Date);
261   - if (strDataAtual <> strDataArqLocal) then // Se o arquivo INI não é da data atual...
262   - begin
263   - Rewrite (HistoricoLog); //Cria/Recria o arquivo
264   - Append(HistoricoLog);
265   - Writeln(HistoricoLog,FormatDateTime('dd/mm hh:nn:ss : ', Now) + '======================> Iniciando o Log <=======================');
266   - end;
267   - Append(HistoricoLog);
268   - Writeln(HistoricoLog,FormatDateTime('dd/mm hh:nn:ss : ', Now)+ '[MapaCacic] '+strMsg); {Grava a string Texto no arquivo texto}
269   - CloseFile(HistoricoLog); {Fecha o arquivo texto}
270   - except
271   - end;
272   -end;
273   -function TfrmMapaCacic.VerFmt(const MS, LS: DWORD): string;
274   - // Format the version number from the given DWORDs containing the info
275   -begin
276   - Result := Format('%d.%d.%d.%d',
277   - [HiWord(MS), LoWord(MS), HiWord(LS), LoWord(LS)])
278   -end;
279   -
280   -function TfrmMapaCacic.GetVersionInfo(p_File: string):string;
281   -var PJVersionInfo1: TPJVersionInfo;
282   -begin
283   - PJVersionInfo1 := TPJVersionInfo.Create(nil);
284   - PJVersionInfo1.FileName := PChar(p_File);
285   - Result := VerFmt(PJVersionInfo1.FixedFileInfo.dwFileVersionMS, PJVersionInfo1.FixedFileInfo.dwFileVersionLS);
286   - PJVersionInfo1.Free;
287   -end;
288   -
289   -procedure TfrmMapaCacic.log_DEBUG(p_msg:string);
290   -Begin
291   - if boolDebugs then log_diario('(v.'+getVersionInfo(ParamStr(0))+') DEBUG - '+p_msg);
292   -End;
293   -
294   -// Função criada devido a divergências entre os valores retornados pelos métodos dos componentes MSI e seus Reports.
295   -function TfrmMapaCacic.Parse(p_ClassName, p_SectionName, p_DataName:string; p_Report : TStringList) : String;
296   -var intClasses, intSections, intDatas, v_achei_SectionName, v_array_SectionName_Count : integer;
297   - v_ClassName, v_DataName, v_string_consulta : string;
298   - v_array_SectionName : tstrings;
299   -begin
300   - Result := '';
301   - if (p_SectionName <> '') then
302   - Begin
303   - v_array_SectionName := g_oCacic.explode(p_SectionName,'/');
304   - v_array_SectionName_Count := v_array_SectionName.Count;
305   - End
306   - else v_array_SectionName_Count := 0;
307   - v_achei_SectionName := 0;
308   - v_ClassName := 'classname="' + p_ClassName + '">';
309   - v_DataName := '<data name="' + p_DataName + '"';
310   -
311   - intClasses := 0;
312   - try
313   - While intClasses < p_Report.Count Do
314   - Begin
315   - if (pos(v_ClassName,p_Report[intClasses])>0) then
316   - Begin
317   - intSections := intClasses;
318   - While intSections < p_Report.Count Do
319   - Begin
320   - if (p_SectionName<>'') then
321   - Begin
322   - v_string_consulta := '<section name="' + v_array_SectionName[v_achei_SectionName]+'">';
323   - if (pos(v_string_consulta,p_Report[intSections])>0) then v_achei_SectionName := v_achei_SectionName+1;
324   - End;
325   -
326   - if (v_achei_SectionName = v_array_SectionName_Count) then
327   - Begin
328   -
329   - intDatas := intSections;
330   - While intDatas < p_Report.Count Do
331   - Begin
332   -
333   - if (pos(v_DataName,p_Report[intDatas])>0) then
334   - Begin
335   - Result := Copy(p_Report[intDatas],pos('>',p_Report[intDatas])+1,length(p_Report[intDatas]));
336   - Result := StringReplace(Result,'</data>','',[rfReplaceAll]);
337   - intClasses := p_Report.Count;
338   - intSections := p_Report.Count;
339   - intDatas := p_Report.Count;
340   - End;
341   - intDatas := intDatas + 1;
342   - End; //for intDatas...
343   - End; // if pos(v_SectionName...
344   - intSections := intSections + 1;
345   - End; // for intSections...
346   - End; // if pos(v_ClassName...
347   - intClasses := intClasses + 1;
348   - End; // for intClasses...
349   - except
350   - frmMapaCacic.Mensagem('ERRO! Problema na rotina parse',true,intPausaPadrao);
351   - end;
352   -end;
353   -
354   -procedure TfrmMapaCacic.Matar(v_dir,v_files: string);
355   -var SearchRec: TSearchRec;
356   - Result: Integer;
357   -begin
358   - Result:=FindFirst(v_dir+v_files, faAnyFile, SearchRec);
359   - while result=0 do
360   - begin
361   - log_DEBUG('Excluindo: "'+v_dir+SearchRec.Name+'"');
362   - DeleteFile(PChar(v_dir+SearchRec.Name));
363   - Result:=FindNext(SearchRec);
364   - end;
365   -end;
366   -
367   -procedure TfrmMapaCacic.Sair;
368   -Begin
369   - g_oCacic.Free();
370   - Application.Terminate;
371   -End;
372   -
373   -procedure TfrmMapaCacic.Finalizar(p_pausa:boolean);
374   -Begin
375   - Mensagem('Finalizando MapaCacic...',false,0);
376   -
377   - CipherClose(g_oCacic.getCacicPath + 'MapaCACIC.dat', tStringsMapaCACIC);
378   - Apaga_Temps;
379   - if p_pausa then sleep(2000); // Pausa de 2 segundos para conclusão de operações de arquivos.
380   - Sair;
381   -End;
382   -
383   -procedure TfrmMapaCacic.Apaga_Temps;
384   -begin
385   - Matar(g_oCacic.getCacicPath + 'temp\','*.vbs');
386   - Matar(g_oCacic.getCacicPath + 'temp\','*.txt');
387   -end;
388   -//
389   -function TfrmMapaCacic.LastPos(SubStr, S: string): Integer;
390   -var
391   - Found, Len, Pos: integer;
392   -begin
393   - Pos := Length(S);
394   - Len := Length(SubStr);
395   - Found := 0;
396   - while (Pos > 0) and (Found = 0) do
397   - begin
398   - if Copy(S, Pos, Len) = SubStr then
399   - Found := Pos;
400   - Dec(Pos);
401   - end;
402   - LastPos := Found;
403   -end;
404   -
405   -
406   -Function TfrmMapaCacic.XML_RetornaValor(Tag : String; Fonte : String): String;
407   -VAR
408   - Parser : TXmlParser;
409   -begin
410   - Parser := TXmlParser.Create;
411   - Parser.Normalize := TRUE;
412   - Parser.LoadFromBuffer(PAnsiChar(Fonte));
413   - Parser.StartScan;
414   - WHILE Parser.Scan DO
415   - Begin
416   - if (Parser.CurPartType in [ptContent, ptCData]) Then // Process Parser.CurContent field here
417   - begin
418   - if (UpperCase(Parser.CurName) = UpperCase(Tag)) then
419   - Result := RemoveZerosFimString(Parser.CurContent);
420   - end;
421   - end;
422   - Parser.Free;
423   - log_DEBUG('XML Parser retornando: "'+Result+'" para Tag "'+Tag+'"');
424   -end;
425   -
426   -Function TfrmMapaCacic.RemoveZerosFimString(Texto : String) : String;
427   -var I : Integer;
428   - str_local_Aux : String;
429   -Begin
430   - str_local_Aux := '';
431   - if (Length(trim(Texto))>0) then
432   - For I := Length(Texto) downto 0 do
433   - if (ord(Texto[I])<>0) Then
434   - str_local_Aux := Texto[I] + str_local_Aux;
435   - Result := trim(str_local_Aux);
436   -end;
437   -
438   -Function TfrmMapaCacic.ComunicaServidor(URL : String; Request : TStringList; MsgAcao: String) : String;
439   -var Response_CS : TStringStream;
440   - strEndereco,
441   - strEnderecoServidor,
442   - strEnderecoWS : String;
443   - idHTTP1 : TIdHTTP;
444   - intAux : integer;
445   - tStringListAuxRequest : TStringList;
446   -Begin
447   - tStringListAuxRequest := TStringList.Create;
448   - tStringListAuxRequest := Request;
449   -
450   - tStringListAuxRequest.Values['cs_cipher'] := '1';
451   - tStringListAuxRequest.Values['cs_compress'] := '0';
452   -
453   -
454   - strEnderecoWS := GetValorDatMemoria('Configs.Endereco_WS', tStringsCACIC);
455   - strEnderecoServidor := GetValorDatMemoria('Configs.EnderecoServidor', tStringsCACIC);
456   -
457   - if (trim(strEnderecoWS)='') then
458   - strEnderecoWS := '/cacic2/ws/';
459   -
460   - if (trim(strEnderecoServidor)='') then
461   - strEnderecoServidor := Trim(GetValorChaveRegIni('Cacic2','ip_serv_cacic',g_oCacic.getCacicPath + 'cacic2.ini'));
462   -
463   - strEndereco := 'http://' + strEnderecoServidor + strEnderecoWS + URL;
464   -
465   - if (trim(MsgAcao)='') then
466   - MsgAcao := '>> Enviando informações iniciais ao Gerente WEB.';
467   -
468   - log_diario(MsgAcao);
469   -
470   - Application.ProcessMessages;
471   -
472   - Response_CS := TStringStream.Create('');
473   -
474   - log_DEBUG('Iniciando comunicação com http://' + strEnderecoServidor + strEnderecoWS + URL);
475   -
476   - Try
477   - idHTTP1 := TIdHTTP.Create(nil);
478   - idHTTP1.AllowCookies := true;
479   - idHTTP1.ASCIIFilter := false;
480   - idHTTP1.AuthRetries := 1;
481   - idHTTP1.BoundPort := 0;
482   - idHTTP1.HandleRedirects := false;
483   - idHTTP1.ProxyParams.BasicAuthentication := false;
484   - idHTTP1.ProxyParams.ProxyPort := 0;
485   - idHTTP1.ReadTimeout := 0;
486   - idHTTP1.RecvBufferSize := 32768;
487   - idHTTP1.RedirectMaximum := 15;
488   - idHTTP1.Request.UserAgent := g_oCacic.enCrypt('AGENTE_CACIC');
489   - idHTTP1.Request.Username := g_oCacic.enCrypt('USER_CACIC');
490   - idHTTP1.Request.Password := g_oCacic.enCrypt('PW_CACIC');
491   - idHTTP1.Request.Accept := 'text/html, */*';
492   - idHTTP1.Request.BasicAuthentication := true;
493   - idHTTP1.Request.ContentLength := -1;
494   - idHTTP1.Request.ContentRangeStart := 0;
495   - idHTTP1.Request.ContentRangeEnd := 0;
496   - idHTTP1.Request.ContentType := 'text/html';
497   - idHTTP1.SendBufferSize := 32768;
498   - idHTTP1.Tag := 0;
499   -
500   - if boolDebugs then
501   - Begin
502   - Log_Debug('Valores de REQUEST para envio ao Gerente WEB:');
503   - for intAux := 0 to tStringListAuxRequest.count -1 do
504   - Log_Debug('#'+inttostr(intAux)+': '+tStringListAuxRequest[intAux]);
505   - End;
506   -
507   - IdHTTP1.Post(strEndereco, tStringListAuxRequest, Response_CS);
508   - idHTTP1.Free;
509   - log_DEBUG('Retorno: "'+Response_CS.DataString+'"');
510   - Except
511   - Mensagem('ERRO! Comunicação impossível com o endereço ' + strEndereco + ': '+Response_CS.DataString,true,intPausaPadrao);
512   - result := '0';
513   - Exit;
514   - end;
515   -
516   - Application.ProcessMessages;
517   - Try
518   - if (UpperCase(XML_RetornaValor('Status', Response_CS.DataString)) <> 'OK') Then
519   - Begin
520   - Mensagem('PROBLEMAS DURANTE A COMUNICAÇÃO',true,intPausaPadrao);
521   - log_diario('Endereço: ' + strEndereco);
522   - log_diario('Mensagem: ' + Response_CS.DataString);
523   - result := '0';
524   - end
525   - Else
526   - Begin
527   - result := Response_CS.DataString;
528   - end;
529   - Response_CS.Free;
530   - Except
531   - Begin
532   - Mensagem('PROBLEMAS DURANTE A COMUNICAÇÃO',true,intPausaPadrao);
533   - log_diario('Endereço: ' + strEndereco);
534   - log_diario('Mensagem: ' + Response_CS.DataString);
535   - result := '0';
536   - End;
537   - End;
538   -end;
539   -
540   -//Para buscar do Arquivo INI...
541   -// Marreta devido a limitações do KERNEL w9x no tratamento de arquivos texto e suas seções
542   -function TfrmMapaCacic.GetValorChaveRegIni(p_SectionName, p_KeyName, p_IniFileName : String) : String;
543   -var
544   -
545   - FileText : TStringList;
546   - i, j, v_Size_Section, v_Size_Key : integer;
547   - v_SectionName, v_KeyName : string;
548   - begin
549   - Result := '';
550   - v_SectionName := '[' + p_SectionName + ']';
551   - v_Size_Section := strLen(PChar(v_SectionName));
552   - v_KeyName := p_KeyName + '=';
553   - v_Size_Key := strLen(PChar(v_KeyName));
554   -
555   - FileText := TStringList.Create;
556   -
557   - try
558   - FileText.LoadFromFile(p_IniFileName);
559   - For i := 0 To FileText.Count - 1 Do
560   - Begin
561   - if (LowerCase(Trim(PChar(Copy(FileText[i],1,v_Size_Section)))) = LowerCase(Trim(PChar(v_SectionName)))) then
562   - Begin
563   - For j := i to FileText.Count - 1 Do
564   - Begin
565   - if (LowerCase(Trim(PChar(Copy(FileText[j],1,v_Size_Key)))) = LowerCase(Trim(PChar(v_KeyName)))) then
566   - Begin
567   - Result := PChar(Copy(FileText[j],v_Size_Key + 1,strLen(PChar(FileText[j]))-v_Size_Key));
568   - Break;
569   - End;
570   - End;
571   - End;
572   - if (Result <> '') then break;
573   - End;
574   - finally
575   - FileText.Free;
576   - end;
577   - end;
578   -
579   -function TfrmMapaCacic.GetFolderDate(Folder: string): TDateTime;
580   -var
581   - Rec: TSearchRec;
582   - Found: Integer;
583   - Date: TDateTime;
584   -begin
585   - if Folder[Length(folder)] = '\' then
586   - Delete(Folder, Length(folder), 1);
587   - Result := 0;
588   - Found := FindFirst(Folder, faDirectory, Rec);
589   - try
590   - if Found = 0 then
591   - begin
592   - Date := FileDateToDateTime(Rec.Time);
593   - Result := Date;
594   - end;
595   - finally
596   - FindClose(Rec);
597   - end;
598   -end;
599   -
600   -Procedure TfrmMapaCacic.CipherClose(p_DatFileName : string; p_tstrCipherOpened : TStrings);
601   -var strCipherOpenImploded : string;
602   - txtFileDatFile : TextFile;
603   -begin
604   - try
605   - FileSetAttr (p_DatFileName,0); // Retira os atributos do arquivo para evitar o erro FILE ACCESS DENIED em máquinas 2000
606   - AssignFile(txtFileDatFile,p_DatFileName); {Associa o arquivo a uma variável do tipo TextFile}
607   -
608   - // Criação do arquivo .DAT
609   - Rewrite (txtFileDatFile);
610   - Append(txtFileDatFile);
611   -
612   - strCipherOpenImploded := g_oCacic.implode(p_tstrCipherOpened,'=CacicIsFree=');
613   - log_DEBUG('Rotina de Fechamento do arquivo DAT ATIVANDO criptografia.');
614   - strCipherClosed := g_oCacic.enCrypt(strCipherOpenImploded);
615   - log_DEBUG('Rotina de Fechamento do arquivo DAT RESTAURANDO estado da criptografia.');
616   -
617   - Writeln(txtFileDatFile,strCipherClosed); {Grava a string Texto no arquivo texto}
618   -
619   - CloseFile(txtFileDatFile);
620   - except
621   - end;
622   -end;
623   -
624   -Procedure TfrmMapaCacic.CipherOpen(p_DatFileName : string; var p_tstrCipherOpened : TStrings);
625   -var v_DatFile : TextFile;
626   - v_strCipherOpened,
627   - v_strCipherClosed : string;
628   - intLoop : integer;
629   -begin
630   - v_strCipherOpened := '';
631   - if FileExists(p_DatFileName) then
632   - begin
633   - AssignFile(v_DatFile,p_DatFileName);
634   - {$IOChecks off}
635   - Reset(v_DatFile);
636   - {$IOChecks on}
637   - if (IOResult <> 0) then // Arquivo não existe, será recriado.
638   - begin
639   - Rewrite (v_DatFile);
640   - Append(v_DatFile);
641   - end;
642   -
643   - Readln(v_DatFile,v_strCipherClosed);
644   - while not EOF(v_DatFile) do Readln(v_DatFile,v_strCipherClosed);
645   - CloseFile(v_DatFile);
646   - strCipherOpened:= g_oCacic.deCrypt(v_strCipherClosed);
647   - end;
648   - if (trim(strCipherOpened)<>'') then
649   - p_tstrCipherOpened := g_oCacic.explode(strCipherOpened,'=CacicIsFree=')
650   - else
651   - p_tstrCipherOpened := g_oCacic.explode('Configs.ID_SO'+g_oCacic.getSeparatorKey+g_oCacic.getWindowsStrId() +g_oCacic.getSeparatorKey+'Configs.Endereco_WS'+g_oCacic.getSeparatorKey+'/cacic2/ws/',g_oCacic.getSeparatorKey+'Patrimonio.dt_ultima_renovacao'+g_oCacic.getSeparatorKey+'0');
652   -
653   - if p_tstrCipherOpened.Count mod 2 = 0 then
654   - p_tstrCipherOpened.Add('');
655   -
656   - log_DEBUG('MemoryDAT aberto com sucesso!');
657   - if boolDebugs then
658   - for intLoop := 0 to (p_tstrCipherOpened.Count-1) do
659   - log_DEBUG('Posição ['+inttostr(intLoop)+'] do MemoryDAT: '+p_tstrCipherOpened[intLoop]);
660   -
661   -end;
662   -
663   -Procedure TfrmMapaCacic.SetValorDatMemoria(p_Chave : string; p_Valor : String; p_tstrCipherOpened : TStrings);
664   -begin
665   - log_DEBUG('Gravando Chave: "'+p_Chave+ '" => "'+p_Valor+'"');
666   - // Exemplo: p_Chave => Configs.nu_ip_servidor : p_Valor => 10.71.0.120
667   - if (p_tstrCipherOpened.IndexOf(p_Chave)<>-1) then
668   - p_tstrCipherOpened[p_tstrCipherOpened.IndexOf(p_Chave)+1] := p_Valor
669   - else
670   - Begin
671   - p_tstrCipherOpened.Add(p_Chave);
672   - p_tstrCipherOpened.Add(p_Valor);
673   - End;
674   -end;
675   -Function TfrmMapaCacic.GetValorDatMemoria(p_Chave : String; p_tstrCipherOpened : TStrings) : String;
676   -begin
677   - log_DEBUG('Resgatando Chave: "'+p_Chave+ '" => "'+Result+'"');
678   - if (p_tstrCipherOpened.IndexOf(p_Chave)<>-1) then
679   - Result := trim(p_tstrCipherOpened[p_tstrCipherOpened.IndexOf(p_Chave)+1])
680   - else
681   - Result := '';
682   -end;
683   -
684   -function TfrmMapaCacic.SetValorChaveRegEdit(Chave: String; Dado: Variant): Variant;
685   -var RegEditSet: TRegistry;
686   - RegDataType: TRegDataType;
687   - strRootKey, strKey, strValue : String;
688   - ListaAuxSet : TStrings;
689   - I : Integer;
690   -begin
691   - ListaAuxSet := g_oCacic.explode(Chave, '\');
692   - strRootKey := ListaAuxSet[0];
693   - For I := 1 To ListaAuxSet.Count - 2 Do
694   - strKey := strKey + ListaAuxSet[I] + '\';
695   - strValue := ListaAuxSet[ListaAuxSet.Count - 1];
696   -
697   - RegEditSet := TRegistry.Create;
698   - try
699   - log_DEBUG('Em TfrmMapaCacic.SetValorChaveRegEdit: Abrindo Registry para Escrita => Root: "'+strRootKey+ '" Key: "'+strKey+'"');
700   - RegEditSet.Access := KEY_WRITE;
701   - RegEditSet.Rootkey := GetRootKey(strRootKey);
702   -
703   - if RegEditSet.OpenKey(strKey, True) then
704   - Begin
705   - RegDataType := RegEditSet.GetDataType(strValue);
706   -
707   - // Sempre será String
708   - RegDataType := rdString;
709   -
710   - if RegDataType = rdString then
711   - begin
712   - RegEditSet.WriteString(strValue, Dado);
713   - end
714   - else if RegDataType = rdExpandString then
715   - begin
716   - RegEditSet.WriteExpandString(strValue, Dado);
717   - end
718   - else if RegDataType = rdInteger then
719   - begin
720   - RegEditSet.WriteInteger(strValue, Dado);
721   - end
722   - else
723   - begin
724   - RegEditSet.WriteString(strValue, Dado);
725   - end;
726   -
727   - end;
728   - finally
729   - RegEditSet.CloseKey;
730   - end;
731   - ListaAuxSet.Free;
732   - RegEditSet.Free;
733   -end;
734   -
735   -function TfrmMapaCacic.GetRootKey(strRootKey: String): HKEY;
736   -begin
737   - if Trim(strRootKey) = 'HKEY_LOCAL_MACHINE' Then Result := HKEY_LOCAL_MACHINE
738   - else if Trim(strRootKey) = 'HKEY_CLASSES_ROOT' Then Result := HKEY_CLASSES_ROOT
739   - else if Trim(strRootKey) = 'HKEY_CURRENT_USER' Then Result := HKEY_CURRENT_USER
740   - else if Trim(strRootKey) = 'HKEY_USERS' Then Result := HKEY_USERS
741   - else if Trim(strRootKey) = 'HKEY_CURRENT_CONFIG' Then Result := HKEY_CURRENT_CONFIG
742   - else if Trim(strRootKey) = 'HKEY_DYN_DATA' Then Result := HKEY_DYN_DATA;
743   -end;
744   -
745   -Function TfrmMapaCacic.RetornaValorVetorUON1(id1 : string) : String;
746   -var I : Integer;
747   -begin
748   - For I := 0 to (Length(VetorUON1)-1) Do
749   - If (VetorUON1[I].id1 = id1) Then Result := VetorUON1[I].nm1;
750   -end;
751   -
752   -Function TfrmMapaCacic.RetornaValorVetorUON1a(id1a : string) : String;
753   -var I : Integer;
754   -begin
755   - For I := 0 to (Length(VetorUON1a)-1) Do
756   - If (VetorUON1a[I].id1a = id1a) Then Result := VetorUON1a[I].nm1a;
757   -end;
758   -
759   -Function TfrmMapaCacic.RetornaValorVetorUON2(id2, idLocal: string) : String;
760   -var I : Integer;
761   -begin
762   - For I := 0 to (Length(VetorUON2)-1) Do
763   - If (VetorUON2[I].id2 = id2) and
764   - (VetorUON2[I].id_local = idLocal) Then Result := VetorUON2[I].nm2;
765   -end;
766   -
767   -procedure TfrmMapaCacic.RecuperaValoresAnteriores(p_strConfigs : String);
768   -begin
769   - Mensagem('Recuperando Valores Anteriores...',false,intPausaPadrao div 3);
770   -
771   - strId_unid_organizacional_nivel1 := GetValorDatMemoria('Patrimonio.id_unid_organizacional_nivel1',tStringsMapaCACIC);
772   - if (strId_unid_organizacional_nivel1='') then
773   - strId_unid_organizacional_nivel1 := g_oCacic.deCrypt(XML.XML_RetornaValor('ID_UON1', p_strConfigs));
774   -
775   - strId_unid_organizacional_nivel1a := GetValorDatMemoria('Patrimonio.id_unid_organizacional_nivel1a',tStringsMapaCACIC);
776   - if (strId_unid_organizacional_nivel1a='') then
777   - strId_unid_organizacional_nivel1a := g_oCacic.deCrypt(XML.XML_RetornaValor('ID_UON1a', p_strConfigs));
778   -
779   - strId_unid_organizacional_nivel2 := GetValorDatMemoria('Patrimonio.id_unid_organizacional_nivel2',tStringsMapaCACIC);
780   - if (strId_unid_organizacional_nivel2='') then
781   - strId_unid_organizacional_nivel2 := g_oCacic.deCrypt(XML.XML_RetornaValor('ID_UON2', p_strConfigs));
782   -
783   - strId_Local := GetValorDatMemoria('Patrimonio.id_local',tStringsMapaCACIC);
784   - if (strId_Local='') then
785   - strId_Local := g_oCacic.deCrypt(XML.XML_RetornaValor('ID_LOCAL', p_strConfigs));
786   -
787   - Try
788   - cb_id_unid_organizacional_nivel1.ItemIndex := cb_id_unid_organizacional_nivel1.Items.IndexOf(RetornaValorVetorUON1(strId_unid_organizacional_nivel1));
789   - cb_id_unid_organizacional_nivel1Change(Nil); // Para filtrar os valores do combo2 de acordo com o valor selecionado no combo1
790   - cb_id_unid_organizacional_nivel1a.ItemIndex := cb_id_unid_organizacional_nivel1a.Items.IndexOf(RetornaValorVetorUON1(strId_unid_organizacional_nivel1));
791   - Except
792   - end;
793   -
794   - Try
795   - cb_id_unid_organizacional_nivel1a.ItemIndex := cb_id_unid_organizacional_nivel1a.Items.IndexOf(RetornaValorVetorUON1a(strId_unid_organizacional_nivel1a));
796   - cb_id_unid_organizacional_nivel1aChange(Nil); // Para filtrar os valores do combo3 de acordo com o valor selecionado no combo2
797   - cb_id_unid_organizacional_nivel2.ItemIndex := cb_id_unid_organizacional_nivel2.Items.IndexOf(RetornaValorVetorUON2(strId_unid_organizacional_nivel2,strId_Local));
798   - Except
799   - end;
800   -
801   - lbEtiqueta1.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta1', p_strConfigs));
802   - lbEtiqueta1a.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta1a', p_strConfigs));
803   -
804   - strTe_localizacao_complementar := GetValorDatMemoria('Patrimonio.te_localizacao_complementar',tStringsMapaCACIC);
805   - if (strTe_localizacao_complementar='') then strTe_localizacao_complementar := g_oCacic.deCrypt(XML.XML_RetornaValor('TE_LOC_COMPL', p_strConfigs));
806   -
807   - // Tentarei buscar informação gravada no Registry
808   - strTe_info_patrimonio1 := GetValorChaveRegEdit('HKEY_LOCAL_MACHINE\SOFTWARE\Dataprev\Patrimonio\te_info_patrimonio1');
809   - if (strTe_info_patrimonio1='') then
810   - Begin
811   - strTe_info_patrimonio1 := GetValorDatMemoria('Patrimonio.te_info_patrimonio1',tStringsMapaCACIC);
812   - End;
813   - if (strTe_info_patrimonio1='') then strTe_info_patrimonio1 := g_oCacic.deCrypt(XML.XML_RetornaValor('TE_INFO1', p_strConfigs));
814   -
815   - strTe_info_patrimonio2 := GetValorDatMemoria('Patrimonio.te_info_patrimonio2',tStringsMapaCACIC);
816   - if (strTe_info_patrimonio2='') then strTe_info_patrimonio2 := g_oCacic.deCrypt(XML.XML_RetornaValor('TE_INFO2', p_strConfigs));
817   -
818   - strTe_info_patrimonio3 := GetValorDatMemoria('Patrimonio.te_info_patrimonio3',tStringsMapaCACIC);
819   - if (strTe_info_patrimonio3='') then strTe_info_patrimonio3 := g_oCacic.deCrypt(XML.XML_RetornaValor('TE_INFO3', p_strConfigs));
820   -
821   - // Tentarei buscar informação gravada no Registry
822   - strTe_info_patrimonio4 := GetValorChaveRegEdit('HKEY_LOCAL_MACHINE\SOFTWARE\Dataprev\Patrimonio\te_info_patrimonio4');
823   - if (strTe_info_patrimonio4='') then
824   - Begin
825   - strTe_info_patrimonio4 := GetValorDatMemoria('Patrimonio.te_info_patrimonio4',tStringsMapaCACIC);
826   - End;
827   - if (strTe_info_patrimonio4='') then strTe_info_patrimonio4 := g_oCacic.deCrypt(XML.XML_RetornaValor('TE_INFO4', p_strConfigs));
828   -
829   - strTe_info_patrimonio5 := GetValorDatMemoria('Patrimonio.te_info_patrimonio5',tStringsMapaCACIC);
830   - if (strTe_info_patrimonio5='') then strTe_info_patrimonio5 := g_oCacic.deCrypt(XML.XML_RetornaValor('TE_INFO5', p_strConfigs));
831   -
832   - strTe_info_patrimonio6 := GetValorDatMemoria('Patrimonio.te_info_patrimonio6',tStringsMapaCACIC);
833   - if (strTe_info_patrimonio6='') then strTe_info_patrimonio6 := g_oCacic.deCrypt(XML.XML_RetornaValor('TE_INFO6', p_strConfigs));
834   -end;
835   -
836   -procedure TfrmMapaCacic.MontaCombos(p_strConfigs : String);
837   -var Parser : TXmlParser;
838   - i : integer;
839   - strAux,
840   - strAux1,
841   - strTagName,
842   - strItemName : string;
843   -begin
844   - Mensagem('Montando Listas para Seleção de Unidades Organizacionais...',false,intPausaPadrao div 3);
845   -
846   - Parser := TXmlParser.Create;
847   - Parser.Normalize := True;
848   - Parser.LoadFromBuffer(PAnsiChar(p_strConfigs));
849   - log_DEBUG('p_strConfigs: '+p_strConfigs);
850   - Parser.StartScan;
851   - i := -1;
852   - strItemName := '';
853   - strTagName := '';
854   - While Parser.Scan DO
855   - Begin
856   - strItemName := UpperCase(Parser.CurName);
857   - if (Parser.CurPartType = ptStartTag) and (strItemName = 'IT1') Then
858   - Begin
859   - i := i + 1;
860   - SetLength(VetorUON1, i + 1); // Aumento o tamanho da matriz dinamicamente de acordo com o número de itens recebidos.
861   - strTagName := 'IT1';
862   - end
863   - else if (Parser.CurPartType = ptEndTag) and (strItemName = 'IT1') then
864   - strTagName := ''
865   - else if (Parser.CurPartType in [ptContent, ptCData]) and (strTagName='IT1')Then
866   - Begin
867   - strAux1 := g_oCacic.deCrypt(Parser.CurContent);
868   - if (strItemName = 'ID1') then
869   - Begin
870   - VetorUON1[i].id1 := strAux1;
871   - log_DEBUG('Gravei VetorUON1.id1: "'+strAux1+'"');
872   - End
873   - else if (strItemName = 'NM1') then
874   - Begin
875   - VetorUON1[i].nm1 := strAux1;
876   - log_DEBUG('Gravei VetorUON1.nm1: "'+strAux1+'"');
877   - End;
878   - End;
879   - End;
880   -
881   - // Código para montar o combo 2
882   - Parser.StartScan;
883   - strTagName := '';
884   - strAux1 := '';
885   -
886   - i := -1;
887   - While Parser.Scan DO
888   - Begin
889   - strItemName := UpperCase(Parser.CurName);
890   - if (Parser.CurPartType = ptStartTag) and (strItemName = 'IT1A') Then
891   - Begin
892   - i := i + 1;
893   - SetLength(VetorUON1a, i + 1); // Aumento o tamanho da matriz dinamicamente de acordo com o número de itens recebidos.
894   - strTagName := 'IT1A';
895   - end
896   - else if (Parser.CurPartType = ptEndTag) and (strItemName = 'IT1A') then
897   - strTagName := ''
898   - else if (Parser.CurPartType in [ptContent, ptCData]) and (strTagName='IT1A')Then
899   - Begin
900   - strAux1 := g_oCacic.deCrypt(Parser.CurContent);
901   - if (strItemName = 'ID1') then
902   - Begin
903   - VetorUON1a[i].id1 := strAux1;
904   - log_DEBUG('Gravei VetorUON1a.id1: "'+strAux1+'"');
905   - End
906   - else if (strItemName = 'SG_LOC') then
907   - Begin
908   - strAux := ' ('+strAux1 + ')';
909   - End
910   - else if (strItemName = 'ID1A') then
911   - Begin
912   - VetorUON1a[i].id1a := strAux1;
913   - log_DEBUG('Gravei VetorUON1a.id1a: "'+strAux1+'"');
914   - End
915   - else if (strItemName = 'NM1A') then
916   - Begin
917   - VetorUON1a[i].nm1a := strAux1+strAux;
918   - log_DEBUG('Gravei VetorUON1a.nm1a: "'+strAux1+strAux+'"');
919   - End
920   - else if (strItemName = 'ID_LOCAL') then
921   - Begin
922   - VetorUON1a[i].id_local := strAux1;
923   - log_DEBUG('Gravei VetorUON1a.id_local: "'+strAux1+'"');
924   - End;
925   -
926   - End;
927   - end;
928   -
929   - // Código para montar o combo 3
930   - Parser.StartScan;
931   - strTagName := '';
932   - i := -1;
933   -
934   - While Parser.Scan DO
935   - Begin
936   - strItemName := UpperCase(Parser.CurName);
937   - if (Parser.CurPartType = ptStartTag) and (strItemName = 'IT2') Then
938   - Begin
939   - i := i + 1;
940   - SetLength(VetorUON2, i + 1); // Aumento o tamanho da matriz dinamicamente de acordo com o número de itens recebidos.
941   - strTagName := 'IT2';
942   - end
943   - else if (Parser.CurPartType = ptEndTag) and (strItemName = 'IT2') then
944   - strTagName := ''
945   - else if (Parser.CurPartType in [ptContent, ptCData]) and (strTagName='IT2')Then
946   - Begin
947   - strAux1 := g_oCacic.deCrypt(Parser.CurContent);
948   - if (strItemName = 'ID1A') then
949   - Begin
950   - VetorUON2[i].id1a := strAux1;
951   - log_DEBUG('Gravei VetorUON2.id1a: "'+strAux1+'"');
952   - End
953   - else if (strItemName = 'ID2') then
954   - Begin
955   - VetorUON2[i].id2 := strAux1;
956   - log_DEBUG('Gravei VetorUON2.id2: "'+strAux1+'"');
957   - End
958   - else if (strItemName = 'NM2') then
959   - Begin
960   - VetorUON2[i].nm2 := strAux1;
961   - log_DEBUG('Gravei VetorUON2.nm2: "'+strAux1+'"');
962   - End
963   - else if (strItemName = 'ID_LOCAL') then
964   - Begin
965   - VetorUON2[i].id_local := strAux1;
966   - log_DEBUG('Gravei VetorUON2.id_local: "'+strAux1+'"');
967   - End;
968   -
969   - End;
970   - end;
971   - Parser.Free;
972   -
973   - // Como os itens do combo1 nunca mudam durante a execução do programa (ao contrario dos combo2 e 3), posso colocar o seu preenchimento aqui mesmo.
974   - cb_id_unid_organizacional_nivel1.Items.Clear;
975   - For i := 0 to Length(VetorUON1) - 1 Do
976   - cb_id_unid_organizacional_nivel1.Items.Add(VetorUON1[i].nm1);
977   -
978   - if (Length(VetorUON1) = 0) then
979   - Begin
980   - frmMapaCacic.Mensagem('ATENÇÃO! Não encontrei Entidades, Linhas de Negócio ou Órgãos cadastrados para esta subrede.',true,intPausaPadrao * 2);
981   - Finalizar(true);
982   - End;
983   -
984   - For i := 0 to Length(VetorUON1) - 1 Do
985   - Begin
986   - Log_DEBUG('VetorUON1['+IntToStr(i)+'].id1='+VetorUON1[i].id1);
987   - Log_DEBUG('VetorUON1['+IntToStr(i)+'].nm1='+VetorUON1[i].nm1);
988   - End;
989   -
990   - For i := 0 to Length(VetorUON1a) - 1 Do
991   - Begin
992   - Log_DEBUG('VetorUON1a['+IntToStr(i)+'].id1='+VetorUON1a[i].id1);
993   - Log_DEBUG('VetorUON1a['+IntToStr(i)+'].id1a='+VetorUON1a[i].id1a);
994   - Log_DEBUG('VetorUON1a['+IntToStr(i)+'].nm1a='+VetorUON1a[i].nm1a);
995   - Log_DEBUG('VetorUON1a['+IntToStr(i)+'].id_local='+VetorUON1a[i].id_local);
996   - End;
997   -
998   - For i := 0 to Length(VetorUON2) - 1 Do
999   - Begin
1000   - Log_DEBUG('VetorUON2['+IntToStr(i)+'].id1a='+VetorUON2[i].id1a);
1001   - Log_DEBUG('VetorUON2['+IntToStr(i)+'].id2='+VetorUON2[i].id2);
1002   - Log_DEBUG('VetorUON2['+IntToStr(i)+'].nm2='+VetorUON2[i].nm2);
1003   - Log_DEBUG('VetorUON2['+IntToStr(i)+'].id_local='+VetorUON2[i].id_local);
1004   - End;
1005   -end;
1006   -
1007   -
1008   -procedure TfrmMapaCacic.cb_id_unid_organizacional_nivel1Change(Sender: TObject);
1009   -var i, j: Word;
1010   - strIdUON1 : String;
1011   -begin
1012   - log_DEBUG('Nível 1 CHANGE');
1013   - // Filtro os itens do combo2, de acordo com o item selecionado no combo1
1014   - strIdUON1 := VetorUON1[cb_id_unid_organizacional_nivel1.ItemIndex].id1;
1015   - cb_id_unid_organizacional_nivel1a.Items.Clear;
1016   - cb_id_unid_organizacional_nivel2.Items.Clear;
1017   - cb_id_unid_organizacional_nivel1a.Enabled := false;
1018   - cb_id_unid_organizacional_nivel2.Enabled := false;
1019   - SetLength(VetorUON1aFiltrado, 0);
1020   -
1021   - log_DEBUG('Tamanho de VetorUON1..: '+IntToStr(Length(VetorUON1)));
1022   - log_DEBUG('ItemIndex de cb_nivel1: '+IntToStr(cb_id_unid_organizacional_nivel1.ItemIndex));
1023   - log_DEBUG('Tamanho de VetorUON1a.: '+IntToStr(Length(VetorUON1a)));
1024   - For i := 0 to Length(VetorUON1a) - 1 Do
1025   - Begin
1026   - Try
1027   - if VetorUON1a[i].id1 = strIdUON1 then
1028   - Begin
1029   - log_DEBUG('Add em cb_nivel1a: '+VetorUON1a[i].nm1a);
1030   - cb_id_unid_organizacional_nivel1a.Items.Add(VetorUON1a[i].nm1a);
1031   - j := Length(VetorUON1aFiltrado);
1032   - SetLength(VetorUON1aFiltrado, j + 1);
1033   - VetorUON1aFiltrado[j] := VetorUON1a[i].id1a + '#' +VetorUON1a[i].id_local;
1034   - log_DEBUG('VetorUON1aFiltrado['+IntToStr(j)+']= '+VetorUON1aFiltrado[j]);
1035   - end;
1036   - Except
1037   - End;
1038   - end;
1039   - if (cb_id_unid_organizacional_nivel1a.Items.Count > 0) then
1040   - Begin
1041   - cb_id_unid_organizacional_nivel1a.Enabled := true;
1042   - cb_id_unid_organizacional_nivel1a.ItemIndex := 0;
1043   - log_DEBUG('Provocando CHANGE em nivel1a');
1044   - cb_id_unid_organizacional_nivel1aChange(nil);
1045   - End;
1046   -end;
1047   -
1048   -procedure TfrmMapaCacic.cb_id_unid_organizacional_nivel1aChange(
1049   - Sender: TObject);
1050   -var i, j: Word;
1051   - strIdUON1a,
1052   - strIdLocal : String;
1053   - intAux : integer;
1054   - tstrAux : TStrings;
1055   -begin
1056   - log_DEBUG('Nível 1a CHANGE');
1057   - // Filtro os itens do combo2, de acordo com o item selecionado no combo1
1058   - //intAux := IfThen(cb_id_unid_organizacional_nivel1a.Items.Count > 1,cb_id_unid_organizacional_nivel1a.ItemIndex+1,0);
1059   - intAux := cb_id_unid_organizacional_nivel1a.ItemIndex;
1060   - Log_debug('cb_id_unid_organizacional_nivel1a.ItemIndex = '+intToStr(cb_id_unid_organizacional_nivel1a.ItemIndex));
1061   -
1062   - Log_debug('VetorUON1aFiltrado['+intToStr(cb_id_unid_organizacional_nivel1a.ItemIndex)+'] => '+VetorUON1aFiltrado[cb_id_unid_organizacional_nivel1a.ItemIndex]);
1063   - tstrAux := TStrings.Create;
1064   - tstrAux := g_oCacic.explode(VetorUON1aFiltrado[cb_id_unid_organizacional_nivel1a.ItemIndex],'#');
1065   -
1066   - strIdUON1a := tstrAux[0];
1067   - strIdLocal := tstrAux[1];
1068   -
1069   - tstrAux.Free;
1070   -
1071   - Log_debug('strIdLocal = '+strIdLocal);
1072   - cb_id_unid_organizacional_nivel2.Items.Clear;
1073   - cb_id_unid_organizacional_nivel2.Enabled := false;
1074   - SetLength(VetorUON2Filtrado, 0);
1075   -
1076   - log_DEBUG('Tamanho de VetorUON1a..: '+IntToStr(Length(VetorUON1a)));
1077   - log_DEBUG('ItemIndex de cb_nivel1a: '+IntToStr(cb_id_unid_organizacional_nivel1a.ItemIndex));
1078   - log_DEBUG('Tamanho de VetorUON2...: '+IntToStr(Length(VetorUON2)));
1079   -
1080   - For i := 0 to Length(VetorUON2) - 1 Do
1081   - Begin
1082   - Try
1083   - if (VetorUON2[i].id1a = strIdUON1a) and
1084   - (VetorUON2[i].id_local = strIdLocal) then
1085   - Begin
1086   - log_DEBUG('Add em cb_nivel2: '+VetorUON2[i].nm2);
1087   - cb_id_unid_organizacional_nivel2.Items.Add(VetorUON2[i].nm2);
1088   - j := Length(VetorUON2Filtrado);
1089   - SetLength(VetorUON2Filtrado, j + 1);
1090   - VetorUON2Filtrado[j] := VetorUON2[i].id2 + '#' + VetorUON2[i].id_local;
1091   - log_DEBUG('VetorUON2Filtrado['+IntToStr(j)+']= '+VetorUON2Filtrado[j]);
1092   - end;
1093   - Except
1094   - End;
1095   - end;
1096   - if (cb_id_unid_organizacional_nivel2.Items.Count > 0) then
1097   - Begin
1098   - cb_id_unid_organizacional_nivel2.Enabled := true;
1099   - cb_id_unid_organizacional_nivel2.ItemIndex := 0;
1100   - End;
1101   -end;
1102   -
1103   -
1104   -procedure TfrmMapaCacic.AtualizaPatrimonio(Sender: TObject);
1105   -var strIdUON1,
1106   - strIdUON1a,
1107   - strIdUON2,
1108   - strIdLocal,
1109   - strRetorno : String;
1110   - tstrListAux : TStringList;
1111   - tstrAux : TStrings;
1112   -begin
1113   - tstrAux := TStrings.Create;
1114   - tstrAux := g_oCacic.explode(VetorUON2Filtrado[cb_id_unid_organizacional_nivel2.ItemIndex],'#');
1115   - Try
1116   - strIdUON1 := VetorUON1[cb_id_unid_organizacional_nivel1.ItemIndex].id1;
1117   - strIdUON2 := tstrAux[0];
1118   - strIdLocal := tstrAux[1];
1119   - Except
1120   - end;
1121   -
1122   - tstrAux := g_oCacic.explode(VetorUON1aFiltrado[cb_id_unid_organizacional_nivel1a.ItemIndex],'#');
1123   - Try
1124   - strIdUON1a := tstrAux[0];
1125   - Except
1126   - end;
1127   -
1128   - tstrAux.Free;
1129   - Mensagem('Enviando Informações Coletadas ao Banco de Dados...',false,intPausaPadrao div 3);
1130   - // Envio dos Dados Coletados ao Banco de Dados
1131   - tstrListAux := TStringList.Create;
1132   - tstrListAux.Values['te_node_address'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.TE_NODE_ADDRESS' , frmMapaCacic.tStringsCACIC));
1133   - tstrListAux.Values['id_so'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('Configs.ID_SO' , frmMapaCacic.tStringsCACIC));
1134   - tstrListAux.Values['te_so'] := g_oCacic.enCrypt(g_oCacic.getWindowsStrId());
1135   - tstrListAux.Values['id_ip_rede'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.ID_IP_REDE' , frmMapaCacic.tStringsCACIC));
1136   - tstrListAux.Values['te_ip'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.TE_IP' , frmMapaCacic.tStringsCACIC));
1137   - tstrListAux.Values['te_nome_computador'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.TE_NOME_COMPUTADOR' , frmMapaCacic.tStringsCACIC));
1138   - tstrListAux.Values['te_workgroup'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.TE_WORKGROUP' , frmMapaCacic.tStringsCACIC));
1139   - tstrListAux.Values['id_usuario'] := g_oCacic.enCrypt(frmMapaCacic.strId_usuario);
1140   - tstrListAux.Values['id_unid_organizacional_nivel1'] := g_oCacic.enCrypt(strIdUON1);
1141   - tstrListAux.Values['id_unid_organizacional_nivel1a']:= g_oCacic.enCrypt(strIdUON1A);
1142   - tstrListAux.Values['id_unid_organizacional_nivel2'] := g_oCacic.enCrypt(strIdUON2);
1143   - tstrListAux.Values['te_localizacao_complementar' ] := g_oCacic.enCrypt(ed_te_localizacao_complementar.Text);
1144   - tstrListAux.Values['te_info_patrimonio1' ] := g_oCacic.enCrypt(ed_te_info_patrimonio1.Text);
1145   - tstrListAux.Values['te_info_patrimonio2' ] := g_oCacic.enCrypt(ed_te_info_patrimonio2.Text);
1146   - tstrListAux.Values['te_info_patrimonio3' ] := g_oCacic.enCrypt(ed_te_info_patrimonio3.Text);
1147   - tstrListAux.Values['te_info_patrimonio4' ] := g_oCacic.enCrypt(ed_te_info_patrimonio4.Text);
1148   - tstrListAux.Values['te_info_patrimonio5' ] := g_oCacic.enCrypt(ed_te_info_patrimonio5.Text);
1149   - tstrListAux.Values['te_info_patrimonio6' ] := g_oCacic.enCrypt(ed_te_info_patrimonio6.Text);
1150   -
1151   - log_DEBUG('Informações para contato com mapa_set_patrimonio:');
1152   - log_DEBUG('te_node_address: '+tstrListAux.Values['te_node_address']);
1153   - log_DEBUG('id_so: '+tstrListAux.Values['id_so']);
1154   - log_DEBUG('te_so: '+tstrListAux.Values['te_so']);
1155   - log_DEBUG('id_ip_rede: '+tstrListAux.Values['id_ip_rede']);
1156   - log_DEBUG('te_ip: '+tstrListAux.Values['te_ip']);
1157   - log_DEBUG('te_nome_computador: '+tstrListAux.Values['te_nome_computador']);
1158   - log_DEBUG('te_workgroup: '+tstrListAux.Values['te_workgroup']);
1159   -
1160   - strRetorno := frmMapaCacic.ComunicaServidor('mapa_set_patrimonio.php', tstrListAux, '');
1161   - tstrListAux.Free;
1162   -
1163   - if not (frmMapaCacic.XML_RetornaValor('STATUS', strRetorno)='OK') then
1164   - Mensagem('ATENÇÃO: PROBLEMAS NO ENVIO DAS INFORMAÇÕES COLETADAS AO BANCO DE DADOS...',true,intPausaPadrao)
1165   - else
1166   - Begin
1167   - Mensagem('Salvando Informações Coletadas em Base Local...',false,intPausaPadrao div 3);
1168   - SetValorDatMemoria('Patrimonio.id_unid_organizacional_nivel1' , strIdUON1, tStringsMapaCACIC);
1169   - SetValorDatMemoria('Patrimonio.id_unid_organizacional_nivel1a', strIdUON1a, tStringsMapaCACIC);
1170   - SetValorDatMemoria('Patrimonio.id_unid_organizacional_nivel2' , strIdUON2, tStringsMapaCACIC);
1171   - SetValorDatMemoria('Patrimonio.id_local' , strIdLocal, tStringsMapaCACIC);
1172   - SetValorDatMemoria('Patrimonio.te_localizacao_complementar' , ed_te_localizacao_complementar.Text, tStringsMapaCACIC);
1173   - SetValorDatMemoria('Patrimonio.te_info_patrimonio1' , ed_te_info_patrimonio1.Text, tStringsMapaCACIC);
1174   - SetValorChaveRegEdit('HKEY_LOCAL_MACHINE\SOFTWARE\Dataprev\Patrimonio\te_info_patrimonio1', ed_te_info_patrimonio1.Text);
1175   - SetValorDatMemoria('Patrimonio.te_info_patrimonio2' , ed_te_info_patrimonio2.Text, tStringsMapaCACIC);
1176   - SetValorDatMemoria('Patrimonio.te_info_patrimonio3' , ed_te_info_patrimonio3.Text, tStringsMapaCACIC);
1177   - SetValorDatMemoria('Patrimonio.te_info_patrimonio4' , ed_te_info_patrimonio4.Text, tStringsMapaCACIC);
1178   - SetValorChaveRegEdit('HKEY_LOCAL_MACHINE\SOFTWARE\Dataprev\Patrimonio\te_info_patrimonio4', ed_te_info_patrimonio4.Text);
1179   - SetValorDatMemoria('Patrimonio.te_info_patrimonio5' , ed_te_info_patrimonio5.Text, tStringsMapaCACIC);
1180   - SetValorDatMemoria('Patrimonio.te_info_patrimonio6' , ed_te_info_patrimonio6.Text, tStringsMapaCACIC);
1181   - SetValorDatMemoria('Patrimonio.ultima_rede_obtida' , GetValorDatMemoria('TcpIp.ID_IP_REDE',frmMapaCacic.tStringsCACIC),tStringsMapaCACIC);
1182   - SetValorDatMemoria('Patrimonio.dt_ultima_renovacao' , FormatDateTime('yyyymmddhhnnss', Now),tStringsMapaCACIC);
1183   - End;
1184   - Finalizar(true);
1185   -end;
1186   -
1187   -procedure TfrmMapaCacic.MontaInterface(p_strConfigs : String);
1188   -Begin
1189   - Mensagem('Montando Interface para Coleta de Informações...',false,intPausaPadrao div 3);
1190   -
1191   - lbEtiqueta1.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta1', p_strConfigs));
1192   - lbEtiqueta1.Visible := true;
1193   - cb_id_unid_organizacional_nivel1.Hint := g_oCacic.deCrypt(XML.XML_RetornaValor('te_help_etiqueta1', p_strConfigs));
1194   - cb_id_unid_organizacional_nivel1.Visible := true;
1195   -
1196   - lbEtiqueta1a.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta1a', p_strConfigs));
1197   - lbEtiqueta1a.Visible := true;
1198   - cb_id_unid_organizacional_nivel1a.Hint := g_oCacic.deCrypt(XML.XML_RetornaValor('te_help_etiqueta1a', p_strConfigs));
1199   - cb_id_unid_organizacional_nivel1a.Visible := true;
1200   -
1201   - lbEtiqueta2.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta2', p_strConfigs));
1202   - lbEtiqueta2.Visible := true;
1203   - cb_id_unid_organizacional_nivel2.Hint := g_oCacic.deCrypt(XML.XML_RetornaValor('te_help_etiqueta2', p_strConfigs));
1204   - cb_id_unid_organizacional_nivel2.Visible := true;
1205   -
1206   - lbEtiqueta3.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta3', p_strConfigs));
1207   - lbEtiqueta3.Visible := true;
1208   - ed_te_localizacao_complementar.Text := strTe_localizacao_complementar;
1209   - ed_te_localizacao_complementar.Visible := true;
1210   -
1211   - log_DEBUG('in_exibir_etiqueta4 -> "'+g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta4', p_strConfigs))+'"');
1212   - if (trim(g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta4', p_strConfigs))) = 'S') then
1213   - begin
1214   - lbEtiqueta4.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta4', p_strConfigs));
1215   - lbEtiqueta4.Visible := true;
1216   - ed_te_info_patrimonio1.Hint := g_oCacic.deCrypt(XML.XML_RetornaValor('te_help_etiqueta4', p_strConfigs));
1217   - ed_te_info_patrimonio1.Text := strTe_info_patrimonio1;
1218   - ed_te_info_patrimonio1.visible := True;
1219   - end;
1220   -
1221   - log_DEBUG('in_exibir_etiqueta5 -> "'+g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta5', p_strConfigs))+'"');
1222   - if (trim(g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta5', p_strConfigs))) = 'S') then
1223   - begin
1224   - lbEtiqueta5.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta5', p_strConfigs));
1225   - lbEtiqueta5.Visible := true;
1226   - ed_te_info_patrimonio2.Hint := g_oCacic.deCrypt(XML.XML_RetornaValor('te_help_etiqueta5', p_strConfigs));
1227   - ed_te_info_patrimonio2.Text := strTe_info_patrimonio2;
1228   - ed_te_info_patrimonio2.visible := True;
1229   - end;
1230   -
1231   - log_DEBUG('in_exibir_etiqueta6 -> "'+g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta6', p_strConfigs))+'"');
1232   - if (trim(g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta6', p_strConfigs))) = 'S') then
1233   - begin
1234   - lbEtiqueta6.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta6', p_strConfigs));
1235   - lbEtiqueta6.Visible := true;
1236   - ed_te_info_patrimonio3.Hint := g_oCacic.deCrypt(XML.XML_RetornaValor('te_help_etiqueta6', p_strConfigs));
1237   - ed_te_info_patrimonio3.Text := strTe_info_patrimonio3;
1238   - ed_te_info_patrimonio3.visible := True;
1239   - end;
1240   -
1241   - log_DEBUG('in_exibir_etiqueta7 -> "'+g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta7', p_strConfigs))+'"');
1242   - if (trim(g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta7', p_strConfigs))) = 'S') then
1243   - begin
1244   - lbEtiqueta7.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta7', p_strConfigs));
1245   - lbEtiqueta7.Visible := true;
1246   - ed_te_info_patrimonio4.Hint := g_oCacic.deCrypt(XML.XML_RetornaValor('te_help_etiqueta7', p_strConfigs));
1247   - ed_te_info_patrimonio4.Text := strTe_info_patrimonio4;
1248   - ed_te_info_patrimonio4.visible := True;
1249   - end;
1250   -
1251   - log_DEBUG('in_exibir_etiqueta8 -> "'+g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta8', p_strConfigs))+'"');
1252   - if (trim(g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta8', p_strConfigs))) = 'S') then
1253   - begin
1254   - lbEtiqueta8.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta8', p_strConfigs));
1255   - lbEtiqueta8.Visible := true;
1256   - ed_te_info_patrimonio5.Hint := g_oCacic.deCrypt(XML.XML_RetornaValor('te_help_etiqueta8', p_strConfigs));
1257   - ed_te_info_patrimonio5.Text := strTe_info_patrimonio5;
1258   - ed_te_info_patrimonio5.visible := True;
1259   - end;
1260   -
1261   - log_DEBUG('in_exibir_etiqueta9 -> "'+g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta9', p_strConfigs))+'"');
1262   - if (trim(g_oCacic.deCrypt(XML.XML_RetornaValor('in_exibir_etiqueta9', p_strConfigs))) = 'S') then
1263   - begin
1264   - lbEtiqueta9.Caption := g_oCacic.deCrypt(XML.XML_RetornaValor('te_etiqueta9', p_strConfigs));
1265   - lbEtiqueta9.Visible := true;
1266   - ed_te_info_patrimonio6.Hint := g_oCacic.deCrypt(XML.XML_RetornaValor('te_help_etiqueta9', p_strConfigs));
1267   - ed_te_info_patrimonio6.Text := strTe_info_patrimonio6;
1268   - ed_te_info_patrimonio6.visible := True;
1269   - end;
1270   -
1271   - Application.ProcessMessages;
1272   - Mensagem('',false,0);
1273   - btGravarInformacoes.Visible := true;
1274   -end;
1275   -
1276   -procedure TfrmMapaCacic.FormClose(Sender: TObject; var Action: TCloseAction);
1277   -begin
1278   - Finalizar(true);
1279   -end;
1280   -// Função adaptada de http://www.latiumsoftware.com/en/delphi/00004.php
1281   -//Para buscar do RegEdit...
1282   -function TfrmMapaCacic.GetValorChaveRegEdit(Chave: String): Variant;
1283   -var RegEditGet: TRegistry;
1284   - RegDataType: TRegDataType;
1285   - strRootKey, strKey, strValue, s: String;
1286   - ListaAuxGet : TStrings;
1287   - DataSize, Len, I : Integer;
1288   -begin
1289   - try
1290   - Result := '';
1291   - ListaAuxGet := g_oCacic.explode(Chave, '\');
1292   -
1293   - strRootKey := ListaAuxGet[0];
1294   - For I := 1 To ListaAuxGet.Count - 2 Do strKey := strKey + ListaAuxGet[I] + '\';
1295   - strValue := ListaAuxGet[ListaAuxGet.Count - 1];
1296   - if (strValue = '(Padrão)') then strValue := ''; //Para os casos de se querer buscar o valor default (Padrão)
1297   - RegEditGet := TRegistry.Create;
1298   -
1299   - RegEditGet.Access := KEY_READ;
1300   - RegEditGet.Rootkey := GetRootKey(strRootKey);
1301   - if RegEditGet.OpenKeyReadOnly(strKey) then //teste
1302   - Begin
1303   - RegDataType := RegEditGet.GetDataType(strValue);
1304   - if (RegDataType = rdString) or (RegDataType = rdExpandString) then Result := RegEditGet.ReadString(strValue)
1305   - else if RegDataType = rdInteger then Result := RegEditGet.ReadInteger(strValue)
1306   - else if (RegDataType = rdBinary) or (RegDataType = rdUnknown)
1307   - then
1308   - begin
1309   - DataSize := RegEditGet.GetDataSize(strValue);
1310   - if DataSize = -1 then exit;
1311   - SetLength(s, DataSize);
1312   - Len := RegEditGet.ReadBinaryData(strValue, PChar(s)^, DataSize);
1313   - if Len <> DataSize then exit;
1314   - Result := trim(RemoveCaracteresEspeciais(s,' ',32,126));
1315   - end
1316   - end;
1317   - finally
1318   - RegEditGet.CloseKey;
1319   - RegEditGet.Free;
1320   - ListaAuxGet.Free;
1321   -
1322   - end;
1323   -end;
1324   -
1325   -Function TfrmMapaCacic.RemoveCaracteresEspeciais(Texto, p_Fill : String; p_start, p_end:integer) : String;
1326   -var I : Integer;
1327   - strAux : String;
1328   -Begin
1329   -// if ord(Texto[I]) in [32..126] Then
1330   -// else strAux := strAux + ' '; // Coloca um espaço onde houver caracteres especiais
1331   - strAux := '';
1332   - if (Length(trim(Texto))>0) then
1333   - For I := 0 To Length(Texto) Do
1334   - if ord(Texto[I]) in [p_start..p_end] Then
1335   - strAux := strAux + Texto[I]
1336   - else
1337   - strAux := strAux + p_Fill;
1338   - Result := strAux;
1339   -end;
1340   -procedure TfrmMapaCacic.CriaFormSenha(Sender: TObject);
1341   -begin
1342   - Application.CreateForm(TfrmAcesso, frmAcesso);
1343   -end;
1344   -
1345   -// Baixada de http://www.infoeng.hpg.ig.com.br/borland_delphi_dicas_2.htm
1346   -function TfrmMapaCacic.LetrasDrives: string;
1347   -var
1348   -Drives: DWord;
1349   -I, Tipo: byte;
1350   -v_Unidade : string;
1351   -begin
1352   -Result := '';
1353   -Drives := GetLogicalDrives;
1354   -if Drives <> 0 then
1355   -for I := 65 to 90 do
1356   - if ((Drives shl (31 - (I - 65))) shr 31) = 1 then
1357   - Begin
1358   - v_Unidade := Char(I) + ':\';
1359   - Tipo := GetDriveType(PChar(v_Unidade));
1360   - case Tipo of
1361   - DRIVE_FIXED: Result := Result + Char(I);
1362   - end;
1363   - End;
1364   -end;
1365   -// By Muad Dib 2003
1366   -// at http://www.planet-source-code.com.
1367   -// Excelente!!!
1368   -function TfrmMapaCacic.SearchFile(p_Drive,p_File:string) : boolean;
1369   -var sr:TSearchRec;
1370   - sDirList:TStringList;
1371   - i:integer;
1372   - strResSearch : String;
1373   -begin
1374   - Result := false;
1375   - strResSearch := '';
1376   - if FindFirst(p_Drive+p_File,faAnyFile,sr) = 0 then
1377   - Begin
1378   - strResSearch := p_Drive+p_File;
1379   - Result := true;
1380   - End
1381   - else
1382   - Begin
1383   - repeat
1384   - until FindNext(sr)<>0;
1385   - FindClose(sr);
1386   - sDirList:= TStringList.Create;
1387   - try
1388   - GetSubDirs(p_Drive,sDirList);
1389   - for i:=0 to sDirList.Count-1 do
1390   - if (sDirList[i]<>'.') and (sDirList[i]<>'..') then
1391   - begin
1392   - //Application.ProcessMessages;
1393   - if (SearchFile(IncludeTrailingPathDelimiter(p_Drive+sDirList[i]),p_File)) then
1394   - Begin
1395   - Result := true;
1396   - Break;
1397   - End;
1398   - end;
1399   - finally
1400   - sDirList.Free;
1401   - End;
1402   - end;
1403   -end;
1404   -procedure TfrmMapaCacic.GetSubDirs(Folder:string; sList:TStringList);
1405   - var
1406   - sr:TSearchRec;
1407   -begin
1408   - if FindFirst(Folder+'*.*',faDirectory,sr)=0 then
1409   - try
1410   - repeat
1411   - if(sr.Attr and faDirectory)=faDirectory then
1412   - sList.Add(sr.Name);
1413   - until FindNext(sr)<>0;
1414   - finally
1415   - FindClose(sr);
1416   - end;
1417   -end;
1418   -
1419   -procedure TfrmMapaCacic.mapa;
1420   -var strConfigs : String;
1421   - tstrAUX : TStrings;
1422   -begin
1423   - tstrAUX := TStrings.Create;
1424   -
1425   - Try
1426   - strConfigs := GetValorDatMemoria('Patrimonio.Configs', frmMapaCacic.tStringsMapaCACIC);
1427   - gbLeiaComAtencao.Visible := true;
1428   - gbInformacoesSobreComputador.Visible := true;
1429   - MontaCombos(strConfigs);
1430   - RecuperaValoresAnteriores(strConfigs);
1431   - MontaInterface(strConfigs);
1432   - Application.ProcessMessages;
1433   - Except
1434   - End;
1435   -End;
1436   -
1437   -procedure TfrmMapaCacic.FormActivate(Sender: TObject);
1438   -var intAux : integer;
1439   - strLetrasDrives,
1440   - strRetorno,
1441   - v_strCacicPath : String;
1442   - Request_mapa : TStringList;
1443   -begin
1444   - if not boolFinalizar then
1445   - Begin
1446   - g_oCacic := TCACIC.Create();
1447   -
1448   - g_oCacic.setBoolCipher(true);
1449   - frmMapaCacic.lbVersao.Caption := 'Versão: ' + frmMapaCacic.GetVersionInfo(ParamStr(0));
1450   -
1451   - if (g_oCacic.isWindowsNTPlataform()) and (not g_oCacic.isWindowsAdmin()) then
1452   - MessageDLG(#13#10+'ATENÇÃO! Essa aplicação requer execução com nível administrativo.',mtError,[mbOK],0)
1453   - else
1454   - Begin
1455   - frmMapaCacic.tStringsMapaCACIC := TStrings.Create;
1456   -
1457   - // Buscarei o caminho do Sistema em \WinDIR\chkSIS.DAT
1458   - CipherOpen(g_oCacic.getWinDir + 'chksis.dat',frmMapaCacic.tStringsMapaCACIC);
1459   - v_strCacicPath := GetValorDatMemoria('cacic2.cacic_dir',frmMapaCacic.tStringsMapaCACIC);
1460   -
1461   - if not (v_strCacicPath = '') then
1462   - Begin
1463   - frmMapaCacic.tStringsCACIC := TStrings.Create;
1464   - g_oCacic.setCacicPath(v_strCacicPath);
1465   -
1466   - // A existência e bloqueio do arquivo abaixo evitará que o Cacic2.exe entre em ação
1467   - AssignFile(v_Aguarde,g_oCacic.getCacicPath + 'temp\aguarde_MAPACACIC.txt'); {Associa o arquivo a uma variável do tipo TextFile}
1468   - {$IOChecks off}
1469   - Reset(v_Aguarde); {Abre o arquivo texto}
1470   - {$IOChecks on}
1471   - if (IOResult <> 0) then // Arquivo não existe, será recriado.
1472   - Rewrite (v_Aguarde);
1473   -
1474   - Append(v_Aguarde);
1475   - Writeln(v_Aguarde,'Apenas um pseudo-cookie para o Cacic2 esperar o término de MapaCACIC');
1476   - Append(v_Aguarde);
1477   -
1478   - CipherOpen(frmMapaCacic.g_oCacic.getCacicPath + frmMapaCacic.g_oCacic.getDatFileName,frmMapaCacic.tStringsCACIC);
1479   -
1480   - if not FileExists(frmMapaCacic.g_oCacic.getCacicPath + 'MapaCACIC.dat') then
1481   - CopyFile(PChar(frmMapaCacic.g_oCacic.getCacicPath + frmMapaCacic.g_oCacic.getDatFileName), PChar(frmMapaCacic.g_oCacic.getCacicPath + 'MapaCACIC.dat'), true);
1482   -
1483   - frmMapaCacic.CipherOpen(frmMapaCacic.g_oCacic.getCacicPath + 'MapaCACIC.dat',frmMapaCacic.tStringsMapaCACIC);
1484   -
1485   - // Sobreponho as informações do MapaCACIC com informações do CACIC, caso sejam mais antigas
1486   - if (GetValorDatMemoria('Patrimonio.dt_ultima_renovacao',tStringsMapaCACIC) = '') or
1487   - (StrToInt64(GetValorDatMemoria('Patrimonio.dt_ultima_renovacao',tStringsMapaCACIC)) < StrToInt64(GetValorDatMemoria('Patrimonio.dt_ultima_renovacao',tStringsCACIC))) then
1488   - frmMapaCacic.tStringsMapaCACIC := frmMapaCacic.tStringsCACIC;
1489   -
1490   - frmMapaCacic.lbNomeServidorWEB.Caption := 'Servidor de Aplicação: '+frmMapaCacic.GetValorDatMemoria('Configs.EnderecoServidor', frmMapaCacic.tStringsCACIC);
1491   - frmMapaCacic.lbMensagens.Caption := 'Entrada de Dados para Autenticação no Módulo Gerente WEB Cacic';
1492   - if (frmMapaCacic.GetValorDatMemoria('TcpIp.TE_NODE_ADDRESS' , frmMapaCacic.tStringsCACIC)='') then
1493   - Begin
1494   - frmMapaCacic.boolAcessoOK := false;
1495   - MessageDLG(#13#10+'Atenção! É necessário executar as coletas do Sistema Cacic.' + #13#10 + #13#10 +
1496   - 'Caso o Sistema Cacic já esteja instalado, clique com botão direito' + #13#10 +
1497   - 'sobre o ícone da bandeja, escolha a opção "Executar Agora" e aguarde' + #13#10 +
1498   - 'o fim do processo.',mtError,[mbOK],0);
1499   - frmMapaCacic.Finalizar(false);
1500   - End
1501   - else
1502   - Begin
1503   -
1504   - boolDebugs := false;
1505   - if DirectoryExists(g_oCacic.getCacicPath + 'Temp\Debugs') then
1506   - Begin
1507   - if (FormatDateTime('ddmmyyyy', GetFolderDate(g_oCacic.getCacicPath + 'Temp\Debugs')) = FormatDateTime('ddmmyyyy', date)) then
1508   - Begin
1509   - boolDebugs := true;
1510   - log_DEBUG('Pasta "' + g_oCacic.getCacicPath + 'Temp\Debugs" com data '+FormatDateTime('dd-mm-yyyy', GetFolderDate(g_oCacic.getCacicPath + 'Temp\Debugs'))+' encontrada. DEBUG ativado.');
1511   - End;
1512   - End;
1513   -
1514   - log_DEBUG('Versão do MapaCacic: '+frmMapaCacic.lbVersao.Caption);
1515   -
1516   - // Acessar...
1517   - CriaFormSenha(nil);
1518   - frmAcesso.ShowModal;
1519   -
1520   - if boolFinalizar then
1521   - Finalizar(false)
1522   - else if boolAcessoOK then
1523   - Begin
1524   - pnMensagens.Visible := true;
1525   - Mensagem('Efetuando Comunicação com o Módulo Gerente WEB em "'+GetValorDatMemoria('Configs.EnderecoServidor', tStringsCACIC)+'"...',false,intPausaPadrao div 3);
1526   - frmAcesso.Free;
1527   -
1528   - // Povoamento com dados de configurações da interface patrimonial
1529   - // Solicita ao servidor as configurações para a Coleta de Informações de Patrimônio
1530   - Request_mapa := TStringList.Create;
1531   - Request_mapa.Values['te_node_address'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.TE_NODE_ADDRESS' , frmMapaCacic.tStringsCACIC));
1532   - Request_mapa.Values['id_so'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('Configs.ID_SO' , frmMapaCacic.tStringsCACIC));
1533   - Request_mapa.Values['te_so'] := g_oCacic.enCrypt(g_oCacic.getWindowsStrId());
1534   - Request_mapa.Values['id_ip_rede'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.ID_IP_REDE' , frmMapaCacic.tStringsCACIC));
1535   - Request_mapa.Values['te_ip'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.TE_IP' , frmMapaCacic.tStringsCACIC));
1536   - Request_mapa.Values['te_nome_computador']:= g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.TE_NOME_COMPUTADOR', frmMapaCacic.tStringsCACIC));
1537   - Request_mapa.Values['te_workgroup'] := g_oCacic.enCrypt(frmMapaCacic.GetValorDatMemoria('TcpIp.TE_WORKGROUP' , frmMapaCacic.tStringsCACIC));
1538   - Request_mapa.Values['id_usuario'] := g_oCacic.enCrypt(frmMapaCacic.strId_usuario);
1539   -
1540   - strRetorno := frmMapaCacic.ComunicaServidor('mapa_get_patrimonio.php', Request_mapa, '.');
1541   -
1542   - log_DEBUG('Retorno: "'+strRetorno+'"');
1543   -
1544   - if (frmMapaCacic.XML_RetornaValor('STATUS', strRetorno)='OK') then
1545   - Begin
1546   - Mensagem('Comunicação Efetuada com Sucesso! Salvando Configurações Obtidas...',false,intPausaPadrao div 3);
1547   - frmMapaCacic.SetValorDatMemoria('Patrimonio.Configs', strRetorno, frmMapaCacic.tStringsMapaCACIC)
1548   - End
1549   - else
1550   - Begin
1551   - Mensagem('PROBLEMAS NA COMUNICAÇÃO COM O MÓDULO GERENTE WEB...',true,intPausaPadrao);
1552   - Finalizar(true);
1553   - End;
1554   -
1555   - Request_mapa.Free;
1556   -
1557   - mapa;
1558   - End;
1559   - End;
1560   - End
1561   - else
1562   - Begin
1563   - frmMapaCacic.boolAcessoOK := false;
1564   - MessageDLG(#13#10+'Atenção! É necessário reinstalar o CACIC nesta estação.' + #13#10 + #13#10 +
1565   - 'A estrutura encontra-se corrompida.' + #13#10,mtError,[mbOK],0);
1566   - frmMapaCacic.Finalizar(false);
1567   - End;
1568   - End;
1569   - End;
1570   -end;
1571   -
1572   -procedure TfrmMapaCacic.FormCreate(Sender: TObject);
1573   -begin
1574   - boolFinalizar := false;
1575   -end;
1576   -
1577   -end.
mapa/mapa.cfg
... ... @@ -1,42 +0,0 @@
1   --$A8
2   --$B-
3   --$C+
4   --$D+
5   --$E-
6   --$F-
7   --$G+
8   --$H+
9   --$I+
10   --$J-
11   --$K-
12   --$L+
13   --$M-
14   --$N+
15   --$O+
16   --$P+
17   --$Q-
18   --$R-
19   --$S-
20   --$T-
21   --$U-
22   --$V+
23   --$W-
24   --$X+
25   --$YD
26   --$Z1
27   --cg
28   --AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
29   --H+
30   --W+
31   --M
32   --$M16384,1048576
33   --K$00400000
34   --LE"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
35   --LN"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
36   --U"C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\CriptografiaDCP;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\Mitec\v1010_Delphi7;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\NTFileSecurity;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\PJVersion"
37   --O"C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\CriptografiaDCP;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\Mitec\v1010_Delphi7;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\NTFileSecurity;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\PJVersion"
38   --I"C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\CriptografiaDCP;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\Mitec\v1010_Delphi7;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\NTFileSecurity;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\PJVersion"
39   --R"C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\CriptografiaDCP;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\Mitec\v1010_Delphi7;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\NTFileSecurity;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\PJVersion"
40   --w-UNSAFE_TYPE
41   --w-UNSAFE_CODE
42   --w-UNSAFE_CAST
mapa/mapa.dof
... ... @@ -1,149 +0,0 @@
1   -[FileVersion]
2   -Version=7.0
3   -[Compiler]
4   -A=8
5   -B=0
6   -C=1
7   -D=1
8   -E=0
9   -F=0
10   -G=1
11   -H=1
12   -I=1
13   -J=0
14   -K=0
15   -L=1
16   -M=0
17   -N=1
18   -O=1
19   -P=1
20   -Q=0
21   -R=0
22   -S=0
23   -T=0
24   -U=0
25   -V=1
26   -W=0
27   -X=1
28   -Y=1
29   -Z=1
30   -ShowHints=1
31   -ShowWarnings=1
32   -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
33   -NamespacePrefix=
34   -SymbolDeprecated=1
35   -SymbolLibrary=1
36   -SymbolPlatform=1
37   -UnitLibrary=1
38   -UnitPlatform=1
39   -UnitDeprecated=1
40   -HResultCompat=1
41   -HidingMember=1
42   -HiddenVirtual=1
43   -Garbage=1
44   -BoundsError=1
45   -ZeroNilCompat=1
46   -StringConstTruncated=1
47   -ForLoopVarVarPar=1
48   -TypedConstVarPar=1
49   -AsgToTypedConst=1
50   -CaseLabelRange=1
51   -ForVariable=1
52   -ConstructingAbstract=1
53   -ComparisonFalse=1
54   -ComparisonTrue=1
55   -ComparingSignedUnsigned=1
56   -CombiningSignedUnsigned=1
57   -UnsupportedConstruct=1
58   -FileOpen=1
59   -FileOpenUnitSrc=1
60   -BadGlobalSymbol=1
61   -DuplicateConstructorDestructor=1
62   -InvalidDirective=1
63   -PackageNoLink=1
64   -PackageThreadVar=1
65   -ImplicitImport=1
66   -HPPEMITIgnored=1
67   -NoRetVal=1
68   -UseBeforeDef=1
69   -ForLoopVarUndef=1
70   -UnitNameMismatch=1
71   -NoCFGFileFound=1
72   -MessageDirective=1
73   -ImplicitVariants=1
74   -UnicodeToLocale=1
75   -LocaleToUnicode=1
76   -ImagebaseMultiple=1
77   -SuspiciousTypecast=1
78   -PrivatePropAccessor=1
79   -UnsafeType=0
80   -UnsafeCode=0
81   -UnsafeCast=0
82   -[Linker]
83   -MapFile=0
84   -OutputObjs=0
85   -ConsoleApp=1
86   -DebugInfo=0
87   -RemoteSymbols=0
88   -MinStackSize=16384
89   -MaxStackSize=1048576
90   -ImageBase=4194304
91   -ExeDescription=
92   -[Directories]
93   -OutputDir=
94   -UnitOutputDir=
95   -PackageDLLOutputDir=
96   -PackageDCPOutputDir=
97   -SearchPath=C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\CriptografiaDCP;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\Mitec\v1010_Delphi7;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\NTFileSecurity;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\PJVersion
98   -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOffice2k;MSI_D7_Rtl
99   -Conditionals=
100   -DebugSourceDirs=C:\Arquivos de programas\Borland\Delphi7\Mitec\D7;C:\Arquivos de programas\Borland\Delphi7\CriptografiaDCP;C:\Arquivos de programas\Borland\Delphi7\CriptografiaDCP\Hashes
101   -UsePackages=0
102   -[Parameters]
103   -RunParams=
104   -HostApplication=
105   -Launcher=
106   -UseLauncher=0
107   -DebugCWD=
108   -[Language]
109   -ActiveLang=
110   -ProjectLang=
111   -RootDir=C:\Arquivos de programas\Borland\Delphi7\Bin\
112   -[Version Info]
113   -IncludeVerInfo=1
114   -AutoIncBuild=0
115   -MajorVer=1
116   -MinorVer=0
117   -Release=0
118   -Build=0
119   -Debug=0
120   -PreRelease=0
121   -Special=0
122   -Private=0
123   -DLL=0
124   -Locale=1046
125   -CodePage=1252
126   -[Version Info Keys]
127   -CompanyName=Dataprev-ES
128   -FileDescription=MAPA-CACIC - Módulo Avulso para Coleta de Informações Patrimoniais
129   -FileVersion=1.0.0.0
130   -InternalName=
131   -LegalCopyright=
132   -LegalTrademarks=
133   -OriginalFilename=
134   -ProductName=
135   -ProductVersion=1.0.0.0
136   -Comments=Baseado na Licença GPL(General Public License)
137   -[HistoryLists\hlDebugSourcePath]
138   -Count=1
139   -Item0=C:\Arquivos de programas\Borland\Delphi7\Mitec\D7;C:\Arquivos de programas\Borland\Delphi7\CriptografiaDCP;C:\Arquivos de programas\Borland\Delphi7\CriptografiaDCP\Hashes
140   -[HistoryLists\hlUnitAliases]
141   -Count=1
142   -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
143   -[HistoryLists\hlSearchPath]
144   -Count=5
145   -Item0=C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\CriptografiaDCP;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\Mitec\v1010_Delphi7;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\NTFileSecurity;C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\PJVersion
146   -Item1=C:\Arquivos de programas\Borland\Delphi7\Comps_CACIC\CriptografiaDCP
147   -Item2=C:\Arquivos de programas\Borland\Delphi7\CriptografiaDCP;C:\Arquivos de programas\Borland\Delphi7\CriptografiaDCP\Ciphers;C:\Arquivos de programas\Borland\Delphi7\CriptografiaDCP\Hashes
148   -Item3=C:\Arquivos de programas\Borland\Delphi7\mitec;C:\Arquivos de programas\Borland\Delphi7\Mitec\D7
149   -Item4=C:\Arquivos de programas\Borland\Delphi7\mitec
mapa/mapa.res
No preview for this file type
mapa/mapa_icon.ico
No preview for this file type
mapa/mapacacic.cfg
... ... @@ -1,38 +0,0 @@
1   --$A8
2   --$B-
3   --$C+
4   --$D+
5   --$E-
6   --$F-
7   --$G+
8   --$H+
9   --$I+
10   --$J-
11   --$K-
12   --$L+
13   --$M-
14   --$N+
15   --$O+
16   --$P+
17   --$Q-
18   --$R-
19   --$S-
20   --$T-
21   --$U-
22   --$V+
23   --$W-
24   --$X+
25   --$YD
26   --$Z1
27   --cg
28   --AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
29   --H+
30   --W+
31   --M
32   --$M16384,1048576
33   --K$00400000
34   --LE"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
35   --LN"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
36   --w-UNSAFE_TYPE
37   --w-UNSAFE_CODE
38   --w-UNSAFE_CAST
mapa/mapacacic.dof
... ... @@ -1,136 +0,0 @@
1   -[FileVersion]
2   -Version=7.0
3   -[Compiler]
4   -A=8
5   -B=0
6   -C=1
7   -D=1
8   -E=0
9   -F=0
10   -G=1
11   -H=1
12   -I=1
13   -J=0
14   -K=0
15   -L=1
16   -M=0
17   -N=1
18   -O=1
19   -P=1
20   -Q=0
21   -R=0
22   -S=0
23   -T=0
24   -U=0
25   -V=1
26   -W=0
27   -X=1
28   -Y=1
29   -Z=1
30   -ShowHints=1
31   -ShowWarnings=1
32   -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
33   -NamespacePrefix=
34   -SymbolDeprecated=1
35   -SymbolLibrary=1
36   -SymbolPlatform=1
37   -UnitLibrary=1
38   -UnitPlatform=1
39   -UnitDeprecated=1
40   -HResultCompat=1
41   -HidingMember=1
42   -HiddenVirtual=1
43   -Garbage=1
44   -BoundsError=1
45   -ZeroNilCompat=1
46   -StringConstTruncated=1
47   -ForLoopVarVarPar=1
48   -TypedConstVarPar=1
49   -AsgToTypedConst=1
50   -CaseLabelRange=1
51   -ForVariable=1
52   -ConstructingAbstract=1
53   -ComparisonFalse=1
54   -ComparisonTrue=1
55   -ComparingSignedUnsigned=1
56   -CombiningSignedUnsigned=1
57   -UnsupportedConstruct=1
58   -FileOpen=1
59   -FileOpenUnitSrc=1
60   -BadGlobalSymbol=1
61   -DuplicateConstructorDestructor=1
62   -InvalidDirective=1
63   -PackageNoLink=1
64   -PackageThreadVar=1
65   -ImplicitImport=1
66   -HPPEMITIgnored=1
67   -NoRetVal=1
68   -UseBeforeDef=1
69   -ForLoopVarUndef=1
70   -UnitNameMismatch=1
71   -NoCFGFileFound=1
72   -MessageDirective=1
73   -ImplicitVariants=1
74   -UnicodeToLocale=1
75   -LocaleToUnicode=1
76   -ImagebaseMultiple=1
77   -SuspiciousTypecast=1
78   -PrivatePropAccessor=1
79   -UnsafeType=0
80   -UnsafeCode=0
81   -UnsafeCast=0
82   -[Linker]
83   -MapFile=0
84   -OutputObjs=0
85   -ConsoleApp=1
86   -DebugInfo=0
87   -RemoteSymbols=0
88   -MinStackSize=16384
89   -MaxStackSize=1048576
90   -ImageBase=4194304
91   -ExeDescription=
92   -[Directories]
93   -OutputDir=
94   -UnitOutputDir=
95   -PackageDLLOutputDir=
96   -PackageDCPOutputDir=
97   -SearchPath=
98   -Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOffice2k;MSI_D7_Rtl
99   -Conditionals=
100   -DebugSourceDirs=
101   -UsePackages=0
102   -[Parameters]
103   -RunParams=
104   -HostApplication=
105   -Launcher=
106   -UseLauncher=0
107   -DebugCWD=
108   -[Language]
109   -ActiveLang=
110   -ProjectLang=
111   -RootDir=C:\Arquivos de programas\Borland\Delphi7\Bin\
112   -[Version Info]
113   -IncludeVerInfo=1
114   -AutoIncBuild=0
115   -MajorVer=2
116   -MinorVer=5
117   -Release=0
118   -Build=6
119   -Debug=0
120   -PreRelease=0
121   -Special=0
122   -Private=0
123   -DLL=0
124   -Locale=1046
125   -CodePage=1252
126   -[Version Info Keys]
127   -CompanyName=Dataprev - Emp. de TI da Prev.Social - URES
128   -FileDescription=MapaCACIC - Módulo Avulso para Coleta de Informações Patrimoniais para o Sistema CACIC
129   -FileVersion=2.5.0.6
130   -InternalName=
131   -LegalCopyright=
132   -LegalTrademarks=
133   -OriginalFilename=
134   -ProductName=MapaCACIC
135   -ProductVersion=2.6
136   -Comments=Baseado na Licença GPL(General Public License)
mapa/mapacacic.dpr
... ... @@ -1,61 +0,0 @@
1   -(**
2   ----------------------------------------------------------------------------------------------------------------------------------------------------------------
3   -Copyright 2000, 2001, 2002, 2003, 2004, 2005 Dataprev - Empresa de Tecnologia e Informações da Previdência Social, Brasil
4   -
5   -Este arquivo é parte do programa CACIC - Configurador Automático e Coletor de Informações Computacionais
6   -
7   -O CACIC é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como
8   -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença, ou (na sua opinião) qualquer versão.
9   -
10   -Este programa é distribuido na esperança que possa ser util, mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
11   -MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.
12   -
13   -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software
14   -Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
15   ----------------------------------------------------------------------------------------------------------------------------------------------------------------
16   -*)
17   -
18   -program MapaCacic;
19   -
20   -uses
21   - Forms,
22   - Windows,
23   - main_mapa in 'main_mapa.pas' {frmMapaCacic},
24   - LibXmlParser in 'LibXmlParser.pas',
25   - XML in 'xml.pas',
26   - acesso in 'acesso.pas' {frmAcesso},
27   - CACIC_Library in '..\CACIC_Library.pas';
28   -
29   -{$R *.res}
30   -
31   -const
32   - CACIC_APP_NAME = 'MapaCacic';
33   -
34   -var
35   - hwind:HWND;
36   - oCacic : TCACIC;
37   -
38   -begin
39   - oCacic := TCACIC.Create();
40   -
41   - if( oCacic.isAppRunning( CACIC_APP_NAME ) )
42   - then begin
43   - hwind := 0;
44   - repeat // The string 'My app' must match your App Title (below)
45   - hwind:=Windows.FindWindowEx(0,hwind,'TApplication', CACIC_APP_NAME );
46   - until (hwind<>Application.Handle);
47   - IF (hwind<>0) then
48   - begin
49   - Windows.ShowWindow(hwind,SW_SHOWNORMAL);
50   - Windows.SetForegroundWindow(hwind);
51   - end;
52   - FreeMemory(0);
53   - end
54   - else
55   - begin
56   - Application.Initialize;
57   - Application.CreateForm(TfrmMapaCacic, frmMapaCacic);
58   - Application.Run;
59   - end;
60   - oCacic.Free();
61   -end.
mapa/mapacacic.res
No preview for this file type
mapa/xml.pas
... ... @@ -1,34 +0,0 @@
1   -unit XML;
2   -
3   -
4   -interface
5   -
6   -Uses LibXmlParser, SysUtils;
7   -
8   -Function XML_RetornaValor(Tag : String; Fonte : String) : String;
9   -
10   -implementation
11   -
12   -
13   -Function XML_RetornaValor(Tag : String; Fonte : String): String;
14   -VAR
15   - Parser : TXmlParser;
16   -begin
17   - Parser := TXmlParser.Create;
18   - Parser.Normalize := TRUE;
19   - Parser.LoadFromBuffer(PAnsiChar(Fonte));
20   - Parser.StartScan;
21   - WHILE Parser.Scan DO
22   - Begin
23   - if (Parser.CurPartType in [ptContent, ptCData]) Then // Process Parser.CurContent field here
24   - begin
25   - if (UpperCase(Parser.CurName) = UpperCase(Tag)) then
26   - Begin
27   - Result := Parser.CurContent;
28   - end;
29   - end;
30   - end;
31   - Parser.Free;
32   -end;
33   -
34   -end.