├── version.txt
├── scripts
└── SinNombre.sh
├── plink.exe
├── psftp.exe
├── Cambios.txt
├── TitoTerm.exe
├── _source
├── TTerm.ico
├── TTerm.res
├── FormAbrirRemoto.lrj
├── FormRemoteOpenDial.lrj
├── FormRemoteExplor.lrj
├── Principal.lfm
├── FormRemoteExplor.lfm
├── FrameTabEdits.lrj
├── FormConexRapida.lrj
├── FormQuickConnect.lrj
├── FrameTabSessions.lrj
├── TTerm.lpr
├── FormRemoteOpenDial.lfm
├── FormQuickConnect.lfm
├── FormQuickConnect.pas
├── Comandos.pas
├── FrameExpRemoto.lrj
├── FormRemoteOpenDial.pas
├── FormRemoteExplor.pas
├── FrameCfgSyntax.lfm
├── FrameCfgSynEdit.lrj
├── FormConfig.lrj
├── FormEditRemoto.lrj
├── FormRemoteEditor.lrj
├── FormEditMacros.lrj
├── FormPrincipal.lrj
├── FrameCfgSynEdit.lfm
├── FormConfig.lfm
├── TTerm.lpi
├── FrameCfgSynEdit.pas
├── FrameTabSession.lrj
├── FormConfig.pas
└── FormEditMacros.pas
├── _screenshots
├── screen1.png
├── prompt_detec.png
├── cmd_connection.png
└── connect_settings.png
├── Docs
└── Manual de Usuario.pdf
├── macros
├── Ejemplos
│ └── Ejemplo Otros CMD.ttm
└── NoName.ttm
├── languages
├── Plain Text.xml
├── INI file.xml
├── Python.xml
├── XML.xml
├── C.xml
├── Awk.xml
├── Asm8086.xml
├── PreSQLOracle.xml
├── UnixShell.xml
├── Terminal Macro.xml
├── ObjectPascal.xml
├── DOS_shell.xml
├── bash.xml
└── SQLOracle.xml
├── _libraries
├── SynFacilUtils-1.23
│ ├── FormSelFuente.pas
│ └── FormSelFuente.lfm
├── SynFacilUtils-1.24
│ ├── FormSelFuente.pas
│ └── FormSelFuente.lfm
├── MisUtils-0.6
│ └── README.md
├── Xpres-1.3.2
│ └── README.md
└── MiConfig-0.4.2
│ ├── MiConfigUtils.pas
│ ├── MiConfigINI.pas
│ └── MiConfigXML.pas
├── TitoTerm.xml
├── LEEME.md
└── README.md
/version.txt:
--------------------------------------------------------------------------------
1 | VER_PROG = '0.8.4';
--------------------------------------------------------------------------------
/scripts/SinNombre.sh:
--------------------------------------------------------------------------------
1 | #Archivo de comandos
2 |
3 |
--------------------------------------------------------------------------------
/plink.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/plink.exe
--------------------------------------------------------------------------------
/psftp.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/psftp.exe
--------------------------------------------------------------------------------
/Cambios.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/Cambios.txt
--------------------------------------------------------------------------------
/TitoTerm.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/TitoTerm.exe
--------------------------------------------------------------------------------
/_source/TTerm.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/_source/TTerm.ico
--------------------------------------------------------------------------------
/_source/TTerm.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/_source/TTerm.res
--------------------------------------------------------------------------------
/_screenshots/screen1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/_screenshots/screen1.png
--------------------------------------------------------------------------------
/Docs/Manual de Usuario.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/Docs/Manual de Usuario.pdf
--------------------------------------------------------------------------------
/_screenshots/prompt_detec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/_screenshots/prompt_detec.png
--------------------------------------------------------------------------------
/_screenshots/cmd_connection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/_screenshots/cmd_connection.png
--------------------------------------------------------------------------------
/_screenshots/connect_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/_screenshots/connect_settings.png
--------------------------------------------------------------------------------
/macros/Ejemplos/Ejemplo Otros CMD.ttm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/t-edson/Tito-s-Terminal/HEAD/macros/Ejemplos/Ejemplo Otros CMD.ttm
--------------------------------------------------------------------------------
/languages/Plain Text.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/_source/FormAbrirRemoto.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":116450494,"name":"tfrmabrirremoto.caption","sourcebytes":[65,98,114,105,114,32,82,101,109,111,116,111,32,46,46,46],"value":"Abrir Remoto ..."}
3 | ]}
4 |
--------------------------------------------------------------------------------
/_source/FormRemoteOpenDial.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":116450494,"name":"tfrmremoteopendial.caption","sourcebytes":[65,98,114,105,114,32,82,101,109,111,116,111,32,46,46,46],"value":"Abrir Remoto ..."}
3 | ]}
4 |
--------------------------------------------------------------------------------
/_source/FormRemoteExplor.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":54618079,"name":"tfrmremoteexplor.caption","sourcebytes":[69,120,112,108,111,114,97,100,111,114,32,82,101,109,111,116,111],"value":"Explorador Remoto"}
3 | ]}
4 |
--------------------------------------------------------------------------------
/_source/Principal.lfm:
--------------------------------------------------------------------------------
1 | object Form1: TForm1
2 | Left = 266
3 | Height = 240
4 | Top = 287
5 | Width = 320
6 | Caption = 'Form1'
7 | OnActivate = FormActivate
8 | OnCreate = FormCreate
9 | OnShow = FormShow
10 | LCLVersion = '1.2.0.3'
11 | end
12 |
--------------------------------------------------------------------------------
/_source/FormRemoteExplor.lfm:
--------------------------------------------------------------------------------
1 | object frmRemoteExplor: TfrmRemoteExplor
2 | Left = 284
3 | Height = 470
4 | Top = 88
5 | Width = 662
6 | Caption = 'Explorador Remoto'
7 | DesignTimePPI = 120
8 | OnActivate = FormActivate
9 | OnCreate = FormCreate
10 | OnDestroy = FormDestroy
11 | OnShow = FormShow
12 | LCLVersion = '2.0.10.0'
13 | end
14 |
--------------------------------------------------------------------------------
/macros/NoName.ttm:
--------------------------------------------------------------------------------
1 | // Sample of macro using Tito's Terminal 0.2b
2 | // Created: 20/10/2014 11:56:16
3 | disconnect //Disconnect first, in case there was another connection
4 | connect "192.168.1.1" //Connect to a new IP
5 | wait "login: " //Wait for this text
6 | sendln "usuario" //Send this text
7 | wait "password: "
8 | sendln "clave"
9 | pause 3 //Wait for 3 seconds
10 | sendln "cd /carpeta_de_trabajo"
11 |
--------------------------------------------------------------------------------
/languages/INI file.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/_source/FrameTabEdits.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":151230590,"name":"tfratabedits.lblbackground.caption","sourcebytes":[60,60,78,111,32,102,105,108,101,115,62,62],"value":"<>"},
3 | {"hash":177351,"name":"tfratabedits.mnnewtab.caption","sourcebytes":[38,78,101,119],"value":"&New"},
4 | {"hash":44709525,"name":"tfratabedits.mnclosetab.caption","sourcebytes":[38,67,108,111,115,101],"value":"&Close"},
5 | {"hash":158729548,"name":"tfratabedits.mncloseall.caption","sourcebytes":[67,108,111,115,101,32,38,65,108,108],"value":"Close &All"},
6 | {"hash":22838259,"name":"tfratabedits.mncloseothers.caption","sourcebytes":[67,108,111,115,101,32,38,79,116,104,101,114,115],"value":"Close &Others"}
7 | ]}
8 |
--------------------------------------------------------------------------------
/_source/FormConexRapida.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":225018270,"name":"tfrmconexrap.caption","sourcebytes":[81,117,105,99,107,32,99,111,110,110,101,99,116,105,111,110],"value":"Quick connection"},
3 | {"hash":5204602,"name":"tfrmconexrap.label1.caption","sourcebytes":[72,111,115,116,58],"value":"Host:"},
4 | {"hash":11067,"name":"tfrmconexrap.btnaceptar.caption","sourcebytes":[38,79,75],"value":"&OK"},
5 | {"hash":177752476,"name":"tfrmconexrap.btncancelar.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"},
6 | {"hash":195835108,"name":"tfrmconexrap.opttelnet.caption","sourcebytes":[38,84,101,108,110,101,116],"value":"&Telnet"},
7 | {"hash":22648,"name":"tfrmconexrap.optssh.caption","sourcebytes":[83,83,72],"value":"SSH"}
8 | ]}
9 |
--------------------------------------------------------------------------------
/_source/FormQuickConnect.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":225018270,"name":"tfrmquickconnect.caption","sourcebytes":[81,117,105,99,107,32,99,111,110,110,101,99,116,105,111,110],"value":"Quick connection"},
3 | {"hash":5204602,"name":"tfrmquickconnect.label1.caption","sourcebytes":[72,111,115,116,58],"value":"Host:"},
4 | {"hash":11067,"name":"tfrmquickconnect.btnaceptar.caption","sourcebytes":[38,79,75],"value":"&OK"},
5 | {"hash":177752476,"name":"tfrmquickconnect.btncancelar.caption","sourcebytes":[38,67,97,110,99,101,108],"value":"&Cancel"},
6 | {"hash":195835108,"name":"tfrmquickconnect.opttelnet.caption","sourcebytes":[38,84,101,108,110,101,116],"value":"&Telnet"},
7 | {"hash":22648,"name":"tfrmquickconnect.optssh.caption","sourcebytes":[83,83,72],"value":"SSH"}
8 | ]}
9 |
--------------------------------------------------------------------------------
/languages/Python.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | and as assert break class continue def del elif else except exec
18 | False finally for from global if import in is lambda None not or
19 | pass print raise return triple True try while with yield
20 |
21 |
22 |
--------------------------------------------------------------------------------
/languages/XML.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/_source/FrameTabSessions.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":123301726,"name":"tfratabsessions.lblnewsession.caption","sourcebytes":[62,38,78,101,119,32,83,101,115,115,105,111,110,32,46,46,46],"value":">&New Session ..."},
3 | {"hash":202546526,"name":"tfratabsessions.lblopensession.caption","sourcebytes":[62,38,79,112,101,110,32,83,101,115,115,105,111,110,32,46,46,46],"value":">&Open Session ..."},
4 | {"hash":90749811,"name":"tfratabsessions.lblrecents.caption","sourcebytes":[62,82,101,99,101,110,116,32,115,101,115,115,105,111,110,115],"value":">Recent sessions"},
5 | {"hash":177351,"name":"tfratabsessions.mnnewtab.caption","sourcebytes":[38,78,101,119],"value":"&New"},
6 | {"hash":44709525,"name":"tfratabsessions.mnclosetab.caption","sourcebytes":[38,67,108,111,115,101],"value":"&Close"},
7 | {"hash":158729548,"name":"tfratabsessions.mncloseall.caption","sourcebytes":[67,108,111,115,101,32,38,65,108,108],"value":"Close &All"},
8 | {"hash":22838259,"name":"tfratabsessions.mncloseothers.caption","sourcebytes":[67,108,111,115,101,32,38,79,116,104,101,114,115],"value":"Close &Others"}
9 | ]}
10 |
--------------------------------------------------------------------------------
/_source/TTerm.lpr:
--------------------------------------------------------------------------------
1 | program TTerm;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | uses
6 | {$IFDEF UNIX}{$IFDEF UseCThreads}
7 | cthreads,
8 | {$ENDIF}{$ENDIF}
9 | Interfaces, // this includes the LCL widgetset
10 | Forms, FormPrincipal, FormQuickConnect, FormConfig, globales, uResaltTerm,
11 | FormEditMacros, FormRemoteExplor, FormRemoteEditor, FormRemoteOpenDial,
12 | GenCod, FrameTabSession, FormSesProperty, Comandos, FrameCfgSyntax, Parser,
13 | RegExpr2;
14 |
15 | {$R *.res}
16 |
17 | begin
18 | RequireDerivedFormResource := True;
19 | Application.Initialize;
20 | Application.CreateForm(TfrmPrincipal, frmPrincipal);
21 | Application.CreateForm(TfrmQuickConnect, frmQuickConnect);
22 | Application.CreateForm(TConfig, Config);
23 | Application.CreateForm(TfrmRemoteExplor, frmRemoteExplor);
24 | Application.CreateForm(TfrmRemoteEditor, frmRemoteEditor);
25 | Application.CreateForm(TfrmRemoteOpenDial, frmRemoteOpenDial);
26 | Application.CreateForm(TfrmEditMacros, frmEditMacros);
27 | Application.CreateForm(TfrmSesProperty, frmSesProperty);
28 | Application.Run ;
29 | end.
30 |
31 |
--------------------------------------------------------------------------------
/_source/FormRemoteOpenDial.lfm:
--------------------------------------------------------------------------------
1 | object frmRemoteOpenDial: TfrmRemoteOpenDial
2 | Left = 291
3 | Height = 352
4 | Top = 210
5 | Width = 540
6 | Caption = 'Abrir Remoto ...'
7 | ClientHeight = 352
8 | ClientWidth = 540
9 | DesignTimePPI = 120
10 | OnActivate = FormActivate
11 | OnCreate = FormCreate
12 | OnDestroy = FormDestroy
13 | OnShow = FormShow
14 | LCLVersion = '2.0.10.0'
15 | object Panel1: TPanel
16 | Left = 0
17 | Height = 64
18 | Top = 288
19 | Width = 540
20 | Align = alBottom
21 | ClientHeight = 64
22 | ClientWidth = 540
23 | ParentFont = False
24 | TabOrder = 0
25 | object butAceptar: TBitBtn
26 | Left = 20
27 | Height = 38
28 | Top = 10
29 | Width = 94
30 | Default = True
31 | DefaultCaption = True
32 | Kind = bkOK
33 | OnClick = butAceptarClick
34 | ParentFont = False
35 | TabOrder = 0
36 | end
37 | object butCancel: TBitBtn
38 | Left = 160
39 | Height = 38
40 | Top = 10
41 | Width = 94
42 | Cancel = True
43 | DefaultCaption = True
44 | Kind = bkCancel
45 | ModalResult = 2
46 | ParentFont = False
47 | TabOrder = 1
48 | end
49 | end
50 | end
51 |
--------------------------------------------------------------------------------
/languages/C.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | "#include "
7 | "#include <assert.h>"
8 | "#include <alloc.h>"
9 | "#include <ctype.h>"
10 | "#include <dir.h>"
11 | "#include <errno.h>"
12 | "#include <float.h>"
13 | "#include <limits.h>"
14 | "#include <math.h>"
15 | "#include <setjmp.h>"
16 | "#include <signal.h>"
17 | "#include <stdarg.h>"
18 | "#include <stdef.h>"
19 | "#include <stdio.h>"
20 | "#include <stlib.h>"
21 | "#include <string.h>"
22 | "#include <time.h>"
23 | "void main(){
}"
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | if else switch case default break goto return for while do continue typedef sizeof NULL
39 | void struct union enum char short int long double float signed unsigned const static extern auto register volatile
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/_source/FormQuickConnect.lfm:
--------------------------------------------------------------------------------
1 | object frmQuickConnect: TfrmQuickConnect
2 | Left = 272
3 | Height = 154
4 | Top = 160
5 | Width = 350
6 | Caption = 'Quick connection'
7 | ClientHeight = 154
8 | ClientWidth = 350
9 | DesignTimePPI = 120
10 | OnShow = FormShow
11 | LCLVersion = '2.0.10.0'
12 | object Label1: TLabel
13 | Left = 40
14 | Height = 20
15 | Top = 22
16 | Width = 34
17 | Caption = 'Host:'
18 | ParentColor = False
19 | ParentFont = False
20 | end
21 | object btnAceptar: TBitBtn
22 | Left = 50
23 | Height = 38
24 | Top = 100
25 | Width = 94
26 | Caption = '&OK'
27 | Default = True
28 | Kind = bkOK
29 | ModalResult = 1
30 | OnClick = btnAceptarClick
31 | ParentFont = False
32 | TabOrder = 1
33 | end
34 | object btnCancelar: TBitBtn
35 | Left = 210
36 | Height = 38
37 | Top = 100
38 | Width = 94
39 | Cancel = True
40 | Caption = '&Cancel'
41 | Kind = bkCancel
42 | ModalResult = 2
43 | OnClick = btnCancelarClick
44 | ParentFont = False
45 | TabOrder = 2
46 | end
47 | object cmbHost: TComboBox
48 | Left = 108
49 | Height = 28
50 | Top = 16
51 | Width = 150
52 | ItemHeight = 20
53 | ParentFont = False
54 | TabOrder = 0
55 | end
56 | object optTelnet: TRadioButton
57 | Left = 40
58 | Height = 24
59 | Top = 60
60 | Width = 65
61 | Caption = '&Telnet'
62 | ParentFont = False
63 | TabOrder = 3
64 | end
65 | object optSSH: TRadioButton
66 | Left = 140
67 | Height = 24
68 | Top = 60
69 | Width = 51
70 | Caption = 'SSH'
71 | ParentFont = False
72 | TabOrder = 4
73 | end
74 | end
75 |
--------------------------------------------------------------------------------
/_libraries/SynFacilUtils-1.23/FormSelFuente.pas:
--------------------------------------------------------------------------------
1 | unit FormSelFuente;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | interface
6 |
7 | uses
8 | Classes, SysUtils, Forms, Controls, StdCtrls,
9 | ButtonPanel;
10 |
11 | type
12 |
13 | TTipFuente = (tfTod, tfSel, tfLin);
14 | { TfrmSelFuente }
15 |
16 | TfrmSelFuente = class(TForm)
17 | ButtonPanel1: TButtonPanel;
18 | Label1: TLabel;
19 | optTod: TRadioButton;
20 | optSel: TRadioButton;
21 | optLin: TRadioButton;
22 | procedure CancelButtonClick(Sender: TObject);
23 | procedure OKButtonClick(Sender: TObject);
24 | private
25 | { private declarations }
26 | public
27 | cancelado: boolean;
28 | procedure SetLanguage(lang: string);
29 | end;
30 |
31 | var
32 | frmSelFuente: TfrmSelFuente;
33 | implementation
34 |
35 | {$R *.lfm}
36 |
37 | { TfrmSelFuente }
38 |
39 | procedure TfrmSelFuente.OKButtonClick(Sender: TObject);
40 | begin
41 | cancelado := false;
42 | frmSelFuente.Close;
43 | end;
44 |
45 | procedure TfrmSelFuente.CancelButtonClick(Sender: TObject);
46 | begin
47 | cancelado := true;
48 | frmSelFuente.Close;
49 | end;
50 |
51 | procedure TfrmSelFuente.SetLanguage(lang: string);
52 | begin
53 | case lowerCase(lang) of
54 | 'es': begin
55 | Caption := 'Seleccionar fuente';
56 | Label1.Caption:='Seleccione fuente a procesar:';
57 | optTod.Caption:='&Todo el texto';
58 | optSel.Caption:='&Selección';
59 | optLin.Caption:='&Línea actual';
60 | end;
61 | 'en': begin
62 | Caption := 'Select Source';
63 | Label1.Caption:='Select the source to process:';
64 | optTod.Caption:='&All the text';
65 | optSel.Caption:='&Selection';
66 | optLin.Caption:='&Current Line';
67 | end;
68 | end;
69 | end;
70 |
71 |
72 | end.
73 |
74 |
--------------------------------------------------------------------------------
/_libraries/SynFacilUtils-1.24/FormSelFuente.pas:
--------------------------------------------------------------------------------
1 | unit FormSelFuente;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | interface
6 |
7 | uses
8 | Classes, SysUtils, Forms, Controls, StdCtrls,
9 | ButtonPanel;
10 |
11 | type
12 |
13 | TTipFuente = (tfTod, tfSel, tfLin);
14 | { TfrmSelFuente }
15 |
16 | TfrmSelFuente = class(TForm)
17 | ButtonPanel1: TButtonPanel;
18 | Label1: TLabel;
19 | optTod: TRadioButton;
20 | optSel: TRadioButton;
21 | optLin: TRadioButton;
22 | procedure CancelButtonClick(Sender: TObject);
23 | procedure OKButtonClick(Sender: TObject);
24 | private
25 | { private declarations }
26 | public
27 | cancelado: boolean;
28 | procedure SetLanguage(lang: string);
29 | end;
30 |
31 | var
32 | frmSelFuente: TfrmSelFuente;
33 | implementation
34 |
35 | {$R *.lfm}
36 |
37 | { TfrmSelFuente }
38 |
39 | procedure TfrmSelFuente.OKButtonClick(Sender: TObject);
40 | begin
41 | cancelado := false;
42 | frmSelFuente.Close;
43 | end;
44 |
45 | procedure TfrmSelFuente.CancelButtonClick(Sender: TObject);
46 | begin
47 | cancelado := true;
48 | frmSelFuente.Close;
49 | end;
50 |
51 | procedure TfrmSelFuente.SetLanguage(lang: string);
52 | begin
53 | case lowerCase(lang) of
54 | 'es': begin
55 | Caption := 'Seleccionar fuente';
56 | Label1.Caption:='Seleccione fuente a procesar:';
57 | optTod.Caption:='&Todo el texto';
58 | optSel.Caption:='&Selección';
59 | optLin.Caption:='&Línea actual';
60 | end;
61 | 'en': begin
62 | Caption := 'Select Source';
63 | Label1.Caption:='Select the source to process:';
64 | optTod.Caption:='&All the text';
65 | optSel.Caption:='&Selection';
66 | optLin.Caption:='&Current Line';
67 | end;
68 | end;
69 | end;
70 |
71 |
72 | end.
73 |
74 |
--------------------------------------------------------------------------------
/_source/FormQuickConnect.pas:
--------------------------------------------------------------------------------
1 | unit FormQuickConnect;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | interface
6 |
7 | uses
8 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
9 | Buttons, Globales;
10 |
11 | type
12 |
13 | { TfrmQuickConnect }
14 |
15 | TfrmQuickConnect = class(TForm)
16 | btnAceptar: TBitBtn;
17 | btnCancelar: TBitBtn;
18 | cmbHost: TComboBox;
19 | Label1: TLabel;
20 | optTelnet: TRadioButton;
21 | optSSH: TRadioButton;
22 | procedure btnAceptarClick(Sender: TObject);
23 | procedure btnCancelarClick(Sender: TObject);
24 | procedure FormShow(Sender: TObject);
25 | private
26 | { private declarations }
27 | public
28 | Cancel: boolean;
29 | //parámetros de conexión
30 | ip : string; //dirección IP
31 | tipo : TTipCon; //tipo de conexión
32 | end;
33 |
34 | var
35 | frmQuickConnect: TfrmQuickConnect;
36 |
37 | implementation
38 |
39 | {$R *.lfm}
40 |
41 | { TfrmQuickConnect }
42 |
43 | procedure TfrmQuickConnect.btnAceptarClick(Sender: TObject);
44 | begin
45 | //lee parámetros
46 | ip := cmbHost.Text;
47 | if optTelnet.Checked then tipo := TCON_TELNET;
48 | if optSSH.Checked then tipo := TCON_SSH;
49 | Cancel := false;
50 | Self.Hide;
51 | end;
52 | procedure TfrmQuickConnect.btnCancelarClick(Sender: TObject);
53 | begin
54 | ip := '';
55 | Cancel := true;
56 | self.Hide;
57 | end;
58 |
59 | procedure TfrmQuickConnect.FormShow(Sender: TObject);
60 | begin
61 | Cancel := true;
62 | cmbHost.Clear;
63 | cmbHost.Text := '192.168.1.1';
64 | optTelnet.Checked:=true;
65 | { if Config.ConRecientes.Count > 0 then begin
66 | cmbHost.Items.AddStrings(Config.ConRecientes);
67 | cmbHost.ItemIndex:=0; //selecciona al primero
68 | end;}
69 | end;
70 |
71 | end.
72 |
73 |
--------------------------------------------------------------------------------
/languages/Awk.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | "BEGIN {}"
15 |
16 | "END {}"
17 |
18 |
19 |
20 | if else while do for in break continue delete
21 | next function func exit
22 | BEGIN END
23 |
24 |
25 | atan2
26 | close cos ctime
27 | exp
28 | getline gsub
29 | index int
30 | length log
31 | match
32 | print printf
33 | rand
34 | sin split sprintf sqrt srand sub substr system
35 | time tolower toupper
36 |
37 |
38 | ARGC ARGV
39 | FILENAME FS
40 | NF NR
41 | OFS ORS OFMT
42 | RLENGTH RS RSTART
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/_source/Comandos.pas:
--------------------------------------------------------------------------------
1 | {Unidad que implementa la ejecución de comandos de tipo: %EDIT, %EXPLORER, ...}
2 | unit Comandos;
3 | {$mode objfpc}{$H+}
4 | interface
5 | uses
6 | Classes, SysUtils, MisUtils, FrameTabSession, Globales, FrameTabSessions,
7 | process, Parser;
8 |
9 | const INI_COMM = '%'; //Initial character for commands
10 |
11 | function ExecSFTP(usr, pwd, ip, cmds: string): boolean;
12 | function ProcessCommand(lin: string; ses: TfraTabSession; tabSessions: TfraTabSessions): boolean;
13 |
14 | implementation
15 | function ExecSFTP(usr, pwd, ip, cmds: string): boolean;
16 | //Ejecuta el cliente SFTP. Devuelve FALSE si hubo error
17 | var
18 | p : TProcess; //el proceso a manejar
19 | begin
20 | Result := true;
21 | StringToFile(cmds, 'killme.tmp'); //Ceea archivo en blanco.
22 | p := TProcess.Create(nil); //Crea proceso
23 | p.Options:= p.Options + [poNoConsole, poWaitOnExit];
24 | p.Executable:='psftp.exe';
25 | p.Parameters.Clear;
26 | p.Parameters.Add(usr+ '@' + ip);
27 | p.Parameters.Add('-pw');
28 | p.Parameters.Add(pwd);
29 | p.Parameters.Add('-b');
30 | p.Parameters.Add('killme.tmp');
31 | try
32 | p.Execute;
33 | except
34 | Result := false;
35 | MsgBox('Fallo al iniciar aplicativo: '+ p.Executable);;
36 | end;
37 | p.Free;
38 | DeleteFile('killme.tmp'); //Limpia la casa
39 | end;
40 |
41 | function ProcessCommand(lin: string; ses: TfraTabSession; tabSessions: TfraTabSessions): boolean;
42 | {Procesa una línea que debe contener un comando. Si no encuentra un comando, devuelve
43 | FALSE.}
44 | var
45 | linCommand: TStringList;
46 | begin
47 | if copy(lin, 1, 1) = INI_COMM then begin //Es un comando.
48 | //Comando equivalente al lenguaje de macros
49 | linCommand := TStringList.Create;
50 | linCommand.Text := copy(lin, 2, length(lin));
51 | cxp.Compilar('current file', linCommand);
52 | if cxp.HayError then begin
53 | cxp.ShowError;
54 | end;
55 | linCommand.Destroy;
56 | exit(true);
57 | end else begin //No se reconoce como comando.
58 | exit(false);
59 | end;
60 | end;
61 |
62 |
63 | end.
64 |
65 |
--------------------------------------------------------------------------------
/_libraries/SynFacilUtils-1.23/FormSelFuente.lfm:
--------------------------------------------------------------------------------
1 | object frmSelFuente: TfrmSelFuente
2 | Left = 236
3 | Height = 144
4 | Top = 214
5 | Width = 330
6 | Caption = 'Seleccionar fuente'
7 | ClientHeight = 144
8 | ClientWidth = 330
9 | LCLVersion = '1.2.4.0'
10 | object optTod: TRadioButton
11 | Left = 16
12 | Height = 19
13 | Top = 56
14 | Width = 89
15 | Caption = '&Todo el texto'
16 | Font.CharSet = ANSI_CHARSET
17 | Font.Height = -12
18 | Font.Name = 'Arial'
19 | Font.Pitch = fpVariable
20 | Font.Quality = fqDraft
21 | ParentFont = False
22 | TabOrder = 0
23 | end
24 | object optSel: TRadioButton
25 | Left = 128
26 | Height = 19
27 | Top = 56
28 | Width = 74
29 | Caption = '&Selección'
30 | Font.CharSet = ANSI_CHARSET
31 | Font.Height = -12
32 | Font.Name = 'Arial'
33 | Font.Pitch = fpVariable
34 | Font.Quality = fqDraft
35 | ParentFont = False
36 | TabOrder = 1
37 | end
38 | object optLin: TRadioButton
39 | Left = 224
40 | Height = 19
41 | Top = 56
42 | Width = 87
43 | Caption = '&Línea actual'
44 | Font.CharSet = ANSI_CHARSET
45 | Font.Height = -12
46 | Font.Name = 'Arial'
47 | Font.Pitch = fpVariable
48 | Font.Quality = fqDraft
49 | ParentFont = False
50 | TabOrder = 2
51 | end
52 | object Label1: TLabel
53 | Left = 16
54 | Height = 15
55 | Top = 16
56 | Width = 163
57 | Caption = 'Seleccione fuente a procesar:'
58 | Font.CharSet = ANSI_CHARSET
59 | Font.Height = -12
60 | Font.Name = 'Arial'
61 | Font.Pitch = fpVariable
62 | Font.Quality = fqDraft
63 | ParentColor = False
64 | ParentFont = False
65 | end
66 | object ButtonPanel1: TButtonPanel
67 | Left = 6
68 | Height = 34
69 | Top = 104
70 | Width = 318
71 | OKButton.Name = 'OKButton'
72 | OKButton.DefaultCaption = True
73 | OKButton.OnClick = OKButtonClick
74 | HelpButton.Name = 'HelpButton'
75 | HelpButton.DefaultCaption = True
76 | CloseButton.Name = 'CloseButton'
77 | CloseButton.DefaultCaption = True
78 | CancelButton.Name = 'CancelButton'
79 | CancelButton.DefaultCaption = True
80 | CancelButton.OnClick = CancelButtonClick
81 | TabOrder = 3
82 | ShowButtons = [pbOK, pbCancel]
83 | end
84 | end
85 |
--------------------------------------------------------------------------------
/_libraries/SynFacilUtils-1.24/FormSelFuente.lfm:
--------------------------------------------------------------------------------
1 | object frmSelFuente: TfrmSelFuente
2 | Left = 236
3 | Height = 144
4 | Top = 214
5 | Width = 330
6 | Caption = 'Seleccionar fuente'
7 | ClientHeight = 144
8 | ClientWidth = 330
9 | LCLVersion = '1.2.4.0'
10 | object optTod: TRadioButton
11 | Left = 16
12 | Height = 19
13 | Top = 56
14 | Width = 89
15 | Caption = '&Todo el texto'
16 | Font.CharSet = ANSI_CHARSET
17 | Font.Height = -12
18 | Font.Name = 'Arial'
19 | Font.Pitch = fpVariable
20 | Font.Quality = fqDraft
21 | ParentFont = False
22 | TabOrder = 0
23 | end
24 | object optSel: TRadioButton
25 | Left = 128
26 | Height = 19
27 | Top = 56
28 | Width = 74
29 | Caption = '&Selección'
30 | Font.CharSet = ANSI_CHARSET
31 | Font.Height = -12
32 | Font.Name = 'Arial'
33 | Font.Pitch = fpVariable
34 | Font.Quality = fqDraft
35 | ParentFont = False
36 | TabOrder = 1
37 | end
38 | object optLin: TRadioButton
39 | Left = 224
40 | Height = 19
41 | Top = 56
42 | Width = 87
43 | Caption = '&Línea actual'
44 | Font.CharSet = ANSI_CHARSET
45 | Font.Height = -12
46 | Font.Name = 'Arial'
47 | Font.Pitch = fpVariable
48 | Font.Quality = fqDraft
49 | ParentFont = False
50 | TabOrder = 2
51 | end
52 | object Label1: TLabel
53 | Left = 16
54 | Height = 15
55 | Top = 16
56 | Width = 163
57 | Caption = 'Seleccione fuente a procesar:'
58 | Font.CharSet = ANSI_CHARSET
59 | Font.Height = -12
60 | Font.Name = 'Arial'
61 | Font.Pitch = fpVariable
62 | Font.Quality = fqDraft
63 | ParentColor = False
64 | ParentFont = False
65 | end
66 | object ButtonPanel1: TButtonPanel
67 | Left = 6
68 | Height = 34
69 | Top = 104
70 | Width = 318
71 | OKButton.Name = 'OKButton'
72 | OKButton.DefaultCaption = True
73 | OKButton.OnClick = OKButtonClick
74 | HelpButton.Name = 'HelpButton'
75 | HelpButton.DefaultCaption = True
76 | CloseButton.Name = 'CloseButton'
77 | CloseButton.DefaultCaption = True
78 | CancelButton.Name = 'CancelButton'
79 | CancelButton.DefaultCaption = True
80 | CancelButton.OnClick = CancelButtonClick
81 | TabOrder = 3
82 | ShowButtons = [pbOK, pbCancel]
83 | end
84 | end
85 |
--------------------------------------------------------------------------------
/languages/Asm8086.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | aaa aad aam aas adc add and call cbw clc cld cli cmc cmp cmps cmpsb cmpsw cwd
7 | daa das dec div esc hlt idiv imul in inc int into iret
8 | ja jae jb jbe jc jcxz je jg jge jl jle jmp jna jnae jnb jnbe jnc jne jng jnge jnl jnle jno jnp jns jnz jo jp jpe jpo js jz lahf lds lea les lods lodsb lodsw loop loope loopew loopne loopnew loopnz loopnzw loopw loopz loopzw mov movs movsb movsw mul neg nop not or out pop popf push pushf rcl rcr ret retf retn rol ror sahf sal sar sbb scas scasb scasw shl shr stc std sti stos stosb stosw sub test wait xchg xlat xlatb xor bound enter ins insb insw leave outs outsb outsw popa pusha pushw arpl lar lsl sgdt sidt sldt smsw str verr verw clts lgdt lidt lldt lmsw ltr bsf bsr bt btc btr bts cdq cmpsd cwde insd iretd iretdf iretf jecxz lfs lgs lodsd loopd looped loopned loopnzd loopzd lss movsd movsx movzx outsd popad popfd pushad pushd pushfd scasd seta setae setb setbe setc sete setg setge setl setle setna setnae setnb setnbe setnc setne setng setnge setnl setnle setno setnp setns setnz seto setp setpe setpo sets setz shld shrd stosd bswap cmpxchg invd invlpg wbinvd xadd lock rep repe repne repnz repz cflush cpuid emms femms cmovo cmovno cmovb cmovc cmovnae cmovae cmovnb cmovnc cmove cmovz cmovne cmovnz cmovbe cmovna cmova cmovnbe cmovs cmovns cmovp cmovpe cmovnp cmovpo cmovl cmovnge cmovge cmovnl cmovle cmovng cmovg cmovnle cmpxchg486 cmpxchg8b loadall loadall286 ibts icebp int1 int3 int01 int03 iretw popaw popfw pushaw pushfw rdmsr rdpmc rdshr rdtsc rsdc rsldt rsm rsts salc smi smint smintold svdc svldt svts syscall sysenter sysexit sysret ud0 ud1 ud2 umov xbts wrmsr wrshr
9 | segment ends end
10 |
11 | ah al ax bh bl bp bx ch cl cr0 cr2 cr3 cr4 cs cx dh di dl dr0 dr1 dr2 dr3 dr6 dr7 ds dx eax ebp ebx ecx edi edx es esi esp fs gs si sp ss st tr3 tr4 tr5 tr6 tr7 st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7
12 |
13 |
14 |
15 |
16 |
17 |
18 | SEGMENT
19 | ENDS
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/_source/FrameExpRemoto.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":89536901,"name":"tfraexpremoto.listview1.columns[0].caption","sourcebytes":[78,111,109,98,114,101],"value":"Nombre"},
3 | {"hash":5028321,"name":"tfraexpremoto.listview1.columns[1].caption","sourcebytes":[70,101,99,104,97],"value":"Fecha"},
4 | {"hash":176414255,"name":"tfraexpremoto.listview1.columns[2].caption","sourcebytes":[84,97,109,97,195,177,111],"value":"Tama\u00F1o"},
5 | {"hash":213845674,"name":"tfraexpremoto.label1.caption","sourcebytes":[67,117,114,114,101,110,116,32,112,97,116,104,58],"value":"Current path:"},
6 | {"hash":263489025,"name":"tfraexpremoto.menuitem4.hint","sourcebytes":[82,101,102,114,101,115,99,97,32,108,97,32,108,105,115,116,97],"value":"Refresca la lista"},
7 | {"hash":211215717,"name":"tfraexpremoto.acfilnewfile.caption","sourcebytes":[38,78,101,119,32,102,105,108,101],"value":"&New file"},
8 | {"hash":101534559,"name":"tfraexpremoto.acfilnewfile.hint","sourcebytes":[67,114,101,97,32,117,110,32,110,117,101,118,111,32,97,114,99,104,105,118,111],"value":"Crea un nuevo archivo"},
9 | {"hash":114386514,"name":"tfraexpremoto.acfilnewfold.caption","sourcebytes":[78,101,119,32,102,111,108,100,101,114],"value":"New folder"},
10 | {"hash":193742869,"name":"tfraexpremoto.acfilrename.caption","sourcebytes":[38,82,101,110,97,109,101],"value":"&Rename"},
11 | {"hash":44849858,"name":"tfraexpremoto.acfileaccess.caption","sourcebytes":[38,69,110,116,101,114],"value":"&Enter"},
12 | {"hash":2800388,"name":"tfraexpremoto.acededit.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"},
13 | {"hash":179055749,"name":"tfraexpremoto.aceddelete.caption","sourcebytes":[38,68,101,108,101,116,101],"value":"&Delete"},
14 | {"hash":237173676,"name":"tfraexpremoto.acverrefres.caption","sourcebytes":[38,82,101,102,114,101,115,104,32,65,108,108],"value":"&Refresh All"},
15 | {"hash":263489025,"name":"tfraexpremoto.acverrefres.hint","sourcebytes":[82,101,102,114,101,115,99,97,32,108,97,32,108,105,115,116,97],"value":"Refresca la lista"},
16 | {"hash":233547989,"name":"tfraexpremoto.acherejec.caption","sourcebytes":[69,38,120,101,99,117,116,101],"value":"E&xecute"},
17 | {"hash":213577587,"name":"tfraexpremoto.acconfig.caption","sourcebytes":[38,83,101,116,116,105,110,103,115],"value":"&Settings"},
18 | {"hash":81818466,"name":"tfraexpremoto.acconfig.hint","sourcebytes":[67,111,110,102,105,103,117,114,97,114,32,101,108,32,101,120,112,108,111,114,97,100,111,114],"value":"Configurar el explorador"}
19 | ]}
20 |
--------------------------------------------------------------------------------
/_source/FormRemoteOpenDial.pas:
--------------------------------------------------------------------------------
1 | unit FormRemoteOpenDial;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | interface
6 |
7 | uses
8 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
9 | ExtCtrls, FrameExpRemoto, MisUtils;
10 |
11 | type
12 |
13 | { TfrmRemoteOpenDial }
14 |
15 | TfrmRemoteOpenDial = class(TForm)
16 | butAceptar: TBitBtn;
17 | butCancel: TBitBtn;
18 | Panel1: TPanel;
19 | procedure butAceptarClick(Sender: TObject);
20 | procedure explorDblClickArch;
21 | procedure FormActivate(Sender: TObject);
22 | procedure FormCreate(Sender: TObject);
23 | procedure FormDestroy(Sender: TObject);
24 | procedure FormShow(Sender: TObject);
25 | private
26 | explor: TfraExpRemoto;
27 | // actualizar: boolean;
28 | public
29 | archivo : string;
30 | end;
31 |
32 | var
33 | frmRemoteOpenDial: TfrmRemoteOpenDial;
34 |
35 | implementation
36 |
37 | {$R *.lfm}
38 |
39 | { TfrmRemoteOpenDial }
40 |
41 | procedure TfrmRemoteOpenDial.FormCreate(Sender: TObject);
42 | begin
43 | explor:= TfraExpRemoto.Create(self);
44 | explor.Parent := self;
45 | explor.Align:=alClient;
46 | explor.StatusBar1.Visible:=false;
47 | explor.OnDblClickArch:=@explorDblClickArch;
48 | end;
49 |
50 | procedure TfrmRemoteOpenDial.FormDestroy(Sender: TObject);
51 | begin
52 | explor.Destroy;
53 | end;
54 |
55 | procedure TfrmRemoteOpenDial.FormShow(Sender: TObject);
56 | begin
57 | archivo := '';
58 | // actualizar := true;
59 | explor.Actualizar; //lee archivos
60 | Caption := 'Open Remote ...';
61 | end;
62 |
63 | procedure TfrmRemoteOpenDial.FormActivate(Sender: TObject);
64 | begin
65 | { if actualizar then begin
66 | explor.Actualizar; //lee archivos
67 | actualizar := false;
68 | end;}
69 | end;
70 |
71 | procedure TfrmRemoteOpenDial.butAceptarClick(Sender: TObject);
72 | begin
73 | if explor.ItemSeleccionado = nil then begin
74 | msgexc('You must select a file.');
75 | exit;
76 | end;
77 | if explor.ItemSeleccionado.ImageIndex = IMG_CARPETA then begin
78 | msgexc('You must select a file.');
79 | exit;
80 | end;
81 | //se supone que se ha seleccionado un archivo
82 | archivo := explor.ItemSeleccionado.Caption;
83 | self.Close;
84 | end;
85 |
86 | procedure TfrmRemoteOpenDial.explorDblClickArch;
87 | //DOble click en explorador
88 | begin
89 | //se supone que se ha seleccionado un archivo
90 | archivo := explor.ItemSeleccionado.Caption;
91 | self.Close;
92 | end;
93 |
94 | end.
95 |
96 |
--------------------------------------------------------------------------------
/_source/FormRemoteExplor.pas:
--------------------------------------------------------------------------------
1 | unit FormRemoteExplor;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | interface
6 |
7 | uses
8 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
9 | FrameExpRemoto, strutils, FormRemoteEditor, FrameTabSession, MisUtils;
10 |
11 | type
12 |
13 | { TfrmRemoteExplor }
14 |
15 | TfrmRemoteExplor = class(TForm)
16 | procedure explorDblClickArch;
17 | procedure explorEnter(Sender: TObject);
18 | procedure FormActivate(Sender: TObject);
19 | procedure FormCreate(Sender: TObject);
20 | procedure FormDestroy(Sender: TObject);
21 | procedure FormShow(Sender: TObject);
22 | private
23 | ses: TfraTabSession;
24 | explor: TfraExpRemoto;
25 | actualizar: boolean;
26 | public
27 | procedure Init(ses0: TfraTabSession);
28 | end;
29 |
30 | var
31 | frmRemoteExplor: TfrmRemoteExplor;
32 |
33 | implementation
34 | {$R *.lfm}
35 |
36 | { TfrmRemoteExplor }
37 |
38 | procedure TfrmRemoteExplor.FormCreate(Sender: TObject);
39 | begin
40 | explor:= TfraExpRemoto.Create(self);
41 | explor.Parent := self;
42 | explor.Align:=alClient;
43 | explor.OnDblClickArch:=@explorDblClickArch;
44 | // explor.OnEnter:=@explorEnter;
45 | end;
46 | procedure TfrmRemoteExplor.FormDestroy(Sender: TObject);
47 | begin
48 | explor.Destroy;
49 | end;
50 |
51 | procedure TfrmRemoteExplor.FormShow(Sender: TObject);
52 | begin
53 | Caption:= 'Remote Explorer';
54 | actualizar := true;
55 | end;
56 |
57 | procedure TfrmRemoteExplor.explorEnter(Sender: TObject);
58 | begin
59 | msgbox('Enter');
60 | end;
61 |
62 | procedure TfrmRemoteExplor.explorDblClickArch;
63 | var
64 | it: TListItem;
65 | begin
66 | it := explor.ItemSeleccionado;
67 | if it = nil then exit;
68 | if AnsiEndsText('.txt',it.Caption)
69 | or AnsiEndsText('.sql',it.Caption)
70 | or AnsiEndsText('.sh',it.Caption)
71 | or AnsiEndsText('.py',it.Caption)
72 | or AnsiEndsText('.pas',it.Caption)
73 | then
74 | begin
75 | //Los tipos conocidos, se editan.
76 | //Se abre el editor en el modo definido en la sesión.
77 | frmRemoteEditor.Init(ses);
78 | frmRemoteEditor.Open(it.Caption);
79 | end;
80 | end;
81 |
82 | procedure TfrmRemoteExplor.FormActivate(Sender: TObject);
83 | begin
84 | if actualizar then begin
85 | explor.Actualizar; //lee archivos
86 | actualizar := false;
87 | end;
88 | end;
89 |
90 | procedure TfrmRemoteExplor.Init(ses0: TfraTabSession);
91 | begin
92 | ses := ses0;
93 | end;
94 |
95 | end.
96 |
97 |
--------------------------------------------------------------------------------
/TitoTerm.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/_source/FrameCfgSyntax.lfm:
--------------------------------------------------------------------------------
1 | object fraCfgSyntax: TfraCfgSyntax
2 | Left = 0
3 | Height = 252
4 | Top = 0
5 | Width = 386
6 | ClientHeight = 252
7 | ClientWidth = 386
8 | TabOrder = 0
9 | DesignLeft = 340
10 | DesignTop = 445
11 | object ComboBox1: TComboBox
12 | Left = 80
13 | Height = 23
14 | Top = 16
15 | Width = 100
16 | ItemHeight = 15
17 | OnChange = ComboBox1Change
18 | TabOrder = 0
19 | Text = 'ComboBox1'
20 | end
21 | object ListBox1: TListBox
22 | Left = 8
23 | Height = 144
24 | Top = 88
25 | Width = 80
26 | ItemHeight = 0
27 | OnClick = ListBox1Click
28 | ScrollWidth = 78
29 | TabOrder = 1
30 | end
31 | object Label1: TLabel
32 | Left = 8
33 | Height = 15
34 | Top = 64
35 | Width = 62
36 | Caption = 'Token type:'
37 | ParentColor = False
38 | end
39 | object colTextCol: TColorButton
40 | Left = 120
41 | Height = 25
42 | Top = 88
43 | Width = 75
44 | BorderWidth = 2
45 | ButtonColorSize = 16
46 | ButtonColor = clBlack
47 | OnColorChanged = colTextColColorChanged
48 | end
49 | object Label2: TLabel
50 | Left = 120
51 | Height = 15
52 | Top = 72
53 | Width = 60
54 | Caption = 'Text Color: '
55 | ParentColor = False
56 | end
57 | object Label3: TLabel
58 | Left = 8
59 | Height = 15
60 | Top = 20
61 | Width = 55
62 | Caption = 'Language:'
63 | ParentColor = False
64 | end
65 | object chkAutoComp: TCheckBox
66 | Left = 232
67 | Height = 19
68 | Top = 20
69 | Width = 112
70 | Caption = 'Auto Completion'
71 | OnChange = chkAutoCompChange
72 | TabOrder = 2
73 | end
74 | object Label4: TLabel
75 | Left = 120
76 | Height = 15
77 | Top = 128
78 | Width = 63
79 | Caption = 'Back Color: '
80 | ParentColor = False
81 | end
82 | object colBackCol: TColorButton
83 | Left = 120
84 | Height = 25
85 | Top = 144
86 | Width = 75
87 | BorderWidth = 2
88 | ButtonColorSize = 16
89 | ButtonColor = clBlack
90 | end
91 | object chkBold: TCheckBox
92 | Left = 240
93 | Height = 19
94 | Top = 72
95 | Width = 44
96 | Caption = 'Bold'
97 | OnChange = chkBoldChange
98 | TabOrder = 3
99 | end
100 | object chkItalic: TCheckBox
101 | Left = 240
102 | Height = 19
103 | Top = 108
104 | Width = 45
105 | Caption = 'Italic'
106 | OnChange = chkItalicChange
107 | TabOrder = 4
108 | end
109 | object chkUnder: TCheckBox
110 | Left = 240
111 | Height = 19
112 | Top = 144
113 | Width = 71
114 | Caption = 'Underline'
115 | OnChange = chkUnderChange
116 | TabOrder = 5
117 | end
118 | end
119 |
--------------------------------------------------------------------------------
/languages/PreSQLOracle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | ACCESS ADD ALL ALTER AND ANY AS ASC AUDIT
13 | BEGIN BETWEEN BY
14 | CHAR CHECK CLUSTERS CLUSTER COLAUTH COLUMN CRASH COMMENT COMPRESS CONNECT CREATE CURRENT
15 | DATE DECIMAL DECLARE DEFAULT DELETE DESC DISTINCT DROP
16 | ELSE END EXCEPTION EXCLUSIVE EXISTS
17 | FILE FLOAT FOR FROM FUNCTION
18 | GOTO GRANT GROUP
19 | HAVING
20 | IDENTIFIED IF IMMEDIATE IN INCREMENT INDEXES INDEX INITIAL INSERT INTEGER INTERSECT INTO IS
21 | LEVEL LIKE LOCK LONG
22 | MAXEXTENTS MINUS MLSLABEL MODE MODIFY
23 | NOAUDIT NOCOMPRESS NOT NOWAIT NULL NUMBER
24 | OF OFFLINE ON OR ONLINE OPTION OFF ORDER OVERLAPS
25 | PCTFREE PRIOR PROCEDURE PRIVILEGES PUBLIC
26 | RANGE RAW RECORD RENAME RESOURCE REVOKE ROW ROWID ROWNUM ROWS
27 | SELECT SESSION SET SYSDATE SPOOL SHARE SIZE SMALLINT SQL START SUBTYPE SUCCESSFUL SYNONYM
28 | TABAUTH TABLE THEN TO TRIGGER TYPE
29 | UID UNION UNIQUE UPDATE USE USER
30 | VALIDATE VALUES VARCHAR VARCHAR2 VIEW VIEWS
31 | WHEN WHENEVER WHERE WITH
32 |
33 |
34 | $DEFINIR
35 | $REDEF
36 | $INCLUIR
37 | $PARA
38 | $CONSULTAR
39 | CON
40 | COMO
41 | EN
42 | FINPARA
43 | FINDEFINIR
44 | HACER
45 | $dir_actual
46 | $nom_actual
47 | $fecha_actual
48 | $formato
49 | $intervalo_semana
50 | $psql_reinic
51 | $expr
52 | $horas
53 | $meses
54 | $infotabla
55 | $infovista
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | /
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/_source/FrameCfgSynEdit.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":78001754,"name":"tfracfgsynedit.label1.caption","sourcebytes":[67,111,108,111,114,58],"value":"Color:"},
3 | {"hash":82734986,"name":"tfracfgsynedit.label8.caption","sourcebytes":[66,97,99,107,32,67,111,108,111,114,58],"value":"Back Color:"},
4 | {"hash":81852730,"name":"tfracfgsynedit.label9.caption","sourcebytes":[84,101,120,116,32,67,111,108,111,114,58],"value":"Text Color:"},
5 | {"hash":8736,"name":"tfracfgsynedit.groupbox1.caption","sourcebytes":[32,32,32],"value":" "},
6 | {"hash":82623170,"name":"tfracfgsynedit.chkverpanver.caption","sourcebytes":[71,117,116,116,101,114],"value":"Gutter"},
7 | {"hash":82734986,"name":"tfracfgsynedit.label2.caption","sourcebytes":[66,97,99,107,32,67,111,108,111,114,58],"value":"Back Color:"},
8 | {"hash":81852730,"name":"tfracfgsynedit.label3.caption","sourcebytes":[84,101,120,116,32,67,111,108,111,114,58],"value":"Text Color:"},
9 | {"hash":42986018,"name":"tfracfgsynedit.chkvernumlin.caption","sourcebytes":[83,104,111,119,32,108,195,173,110,101,32,110,117,109,98,101,114],"value":"Show l\u00EDne number"},
10 | {"hash":63852547,"name":"tfracfgsynedit.chkvermarple.caption","sourcebytes":[83,104,111,119,32,102,111,108,100,105,110,103,32,109,97,114,107,115],"value":"Show folding marks"},
11 | {"hash":544,"name":"tfracfgsynedit.groupbox2.caption","sourcebytes":[32,32,32,32,32,32,32,32,32,32,32,32,32,32],"value":" "},
12 | {"hash":216043156,"name":"tfracfgsynedit.chkhighcurword.caption","sourcebytes":[72,105,103,104,108,105,103,104,116,32,99,117,114,114,101,110,116,32,119,111,114,100],"value":"Highlight current word"},
13 | {"hash":116289418,"name":"tfracfgsynedit.label10.caption","sourcebytes":[66,97,99,107,32,99,111,108,111,114,58],"value":"Back color:"},
14 | {"hash":115407162,"name":"tfracfgsynedit.label11.caption","sourcebytes":[84,101,120,116,32,99,111,108,111,114,58],"value":"Text color:"},
15 | {"hash":39761194,"name":"tfracfgsynedit.label12.caption","sourcebytes":[70,114,97,109,101,32,99,111,108,111,114,58],"value":"Frame color:"},
16 | {"hash":48606020,"name":"tfracfgsynedit.chkfullword.caption","sourcebytes":[70,117,108,108,32,87,111,114,100],"value":"Full Word"},
17 | {"hash":237536586,"name":"tfracfgsynedit.chkhighcurlin.caption","sourcebytes":[72,105,103,104,108,105,103,104,116,32,99,117,114,114,101,110,116,32,108,105,110,101,58],"value":"Highlight current line:"},
18 | {"hash":200403954,"name":"tfracfgsynedit.chkverbardesv.caption","sourcebytes":[38,86,101,114,116,105,99,97,108,32,83,99,114,111,108,108,98,97,114],"value":"&Vertical Scrollbar"},
19 | {"hash":97399170,"name":"tfracfgsynedit.chkverbardesh.caption","sourcebytes":[38,72,111,114,105,122,111,110,116,97,108,32,83,99,114,111,108,108,98,97,114],"value":"&Horizontal Scrollbar"},
20 | {"hash":108049882,"name":"tfracfgsynedit.label6.caption","sourcebytes":[70,111,110,116,32,110,97,109,101,58],"value":"Font name:"},
21 | {"hash":27373697,"name":"tfracfgsynedit.cmbtipoletra.text","sourcebytes":[99,109,98,84,105,112,111,76,101,116,114,97],"value":"cmbTipoLetra"},
22 | {"hash":106882778,"name":"tfracfgsynedit.label7.caption","sourcebytes":[70,111,110,116,32,83,105,122,101,58],"value":"Font Size:"}
23 | ]}
24 |
--------------------------------------------------------------------------------
/languages/UnixShell.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | "awk '{}'"
7 | "awk -F. '{print $1}'"
8 | "case $x in
9 | 1)
echo ""uno""
10 | ;;
11 | 2)
echo ""dos""
12 | ;;
13 | *)
echo ""otro""
14 | ;;
15 | esac"
16 | "cd .."
17 | "chmod 755" "chmod 777"
18 | "chown usuario directorio/archivo"
19 | "cp origen destino"
20 | "crontab -l"
21 | "crontab -l | grep "
22 | "date +%Y%m%d %H%M%S"
23 | "df -k"
24 | "df -k | grep "
25 | "du -k"
26 | "echo """""
27 | "for variable in $lista
do
done"
28 | "if [ expresíon ]; then
fi"
29 | "if [ expresíon ]; then
else
fi"
30 | "kill -9 "
31 | "ls -l"
32 | "mv origen destino"
33 | "nawk -F. ""{print $1}"""
34 | "passwd usuario"
35 | "ps -fu"
36 | "useradd usuario"
37 | "wc -l "
38 | "while [ exprsion ]; do
done"
39 |
40 |
41 |
42 |
43 |
44 |
45 | alias ar asa
46 | banner basename bash bc bdiff break bunzip2 bzip2
47 | cal calendar caller case cat cc cd chmod cksum clear cmp col comm command compress continue cp cpio crontab crypt csplit ctags cut
48 | date dc dd declare deroff dev df diff diff3 dircmp dirname do done du
49 | echo ed egrep elif else env esac eval ex exec exit expand export expr
50 | false fc fgrep fi file find fmt fold for function functions
51 | getconf getopt getopts grep gres
52 | halt hash head help history hostname
53 | iconv id if in integer
54 | jobs join kill local logout
55 | lc let line ln logname look ls
56 | m4 mail mailx make man mkdir more mt mv
57 | newgrp nl nm nohup ntps od
58 | pack paste patch pathchk pax pcat perl pg pr print printf ps pwd
59 | read readonly reboot red return rev rm rmdir
60 | sed select seq set sh shift size sleep sort spell split start strings strip stty sum suspend sync
61 | tail tar tee test then time times touch tr trap true tsort tty type typeset
62 | ulimit umask unalias uname uncompress unexpand uniq unpack unset until uudecode uuencode
63 | vdir vi vim
64 | wait wc whatis whence whereis which while who whoami
65 | xargs zcat
66 |
67 |
68 | awk nawk
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/_libraries/MisUtils-0.6/README.md:
--------------------------------------------------------------------------------
1 | MisUtils 0.6
2 | ============
3 |
4 | Useful routines for Lazarus, for showing messages and developing multilingual applications.
5 |
6 | Inside this unit, we have this functions for showing messages:
7 |
8 | * MsgBox() -> Shows a box with a message. Similar a ShowMessage.
9 | * MsgExc() -> Shows a box with a message and an Icon of Exclamation.
10 | * MsgErr() -> Shows a box with a message and an Icon of Error.
11 |
12 | * MsgYesNo() -> Prompt for a Yes/No answer.
13 | * MsgYesNoCancel() -> Prompt for a Yes/No answer, with a cancel option.
14 |
15 | Moreover, this unit includes a diccionary for translating messages. To use it, are declared the next functions:
16 |
17 | * TranslateMsgs -> Flag for to enable the translation of messages used with MsgBox(), MsgExc() and MsgErr(), MsgYesNo() and MsgYesNoCancel().
18 | * dic() -> Translates one string using the internal dictionary.
19 | * dicSet() -> Adds or replace an entry of the internal dictionary.
20 | * dicDel() -> Cleans an entry of the internal dictionary.
21 | * dicClear() -> Removes all entries of the internal dictionary.
22 |
23 | The translation feature, for the source code, works in the following way:
24 |
25 | * There is an internal dictionary (called "dictionary") defined in the Unit "MisUtils". It is a public field, created in the "Initialization" section.
26 | * This dictionary contain several entries of the form (key -> value).
27 | * The "key" field of the dictionary is a string with a text in the language that the program is codified (like: cad := dic('hello'); ).
28 | * The "value" field of the dictionary is a string with a text that is the translation of the "key" text ( "hello" -> "hola").
29 | * Thus, the dictionary contains the translation of all strings of the source (using the dictionary) for an unique language.
30 | * Every time, it's needed to change the language, the dictionary must be filled with new "value" strings for the new language.
31 |
32 | So, to have the translation working, the dictionary must be first filled.
33 |
34 | How to fill the dictionary?
35 | It's done using dicSet(). The recommended way is to use a procedure like this:
36 |
37 | ```
38 | procedure TForm1.SetLanguage(lang: string);
39 | begin
40 | case lang of
41 | 'en': begin
42 | dicClear; //if it's yet in English
43 | end;
44 | 'es': begin
45 | dicSet('Hello','Hola');
46 | dicSet('Bye','Adios');
47 | end;
48 | ...
49 | end;
50 | end;
51 | ```
52 | The text used in the first parameter of dicSet(), must correspond exactly to the text used on the other parts of the source code.
53 |
54 | After filled the dictionary, how do I put the text in my code?
55 |
56 | The formal way is to use dic(), for every string that need to be translated. So if you have in your code:
57 |
58 | ```
59 | varStr := 'Hello';
60 | ```
61 |
62 | then you would need to change it, for:
63 |
64 | ```
65 | varStr := dic('Hello'); //we asume that we already have translated 'Hello' with dicSet().
66 | ```
67 |
68 | dic() can work similar to Format() too, because have an overloaded version.
69 |
70 | To show messages, it's possible to use the special functions of "MisUtils" like MsgBox() or MsgExc() that perform the translation without using dic().
71 |
72 | For more information, check the sample codes.
--------------------------------------------------------------------------------
/languages/Terminal Macro.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
10 | "IF \_expresion THEN
ENDIF"
11 | "IF \_expresion THEN
ELSE
ENDIF"
12 | "WHILE expresion
ENDWHILE"
13 | "timeout := 20"
14 | "CONNECT ""192.168.1.1"""
15 | "CONNECTSSH ""192.168.1.1"""
16 | "MESSAGEBOX ""\_"""
17 | "SENDLN ""text to send"""
18 | "WAIT ""text to wait"""
19 | "PAUSE \_1"
20 | "curIP := ""192.168.1.1"""
21 | "curTYPE := ""telnet"""
22 | "curTYPE := ""SSH"""
23 | "curTYPE := ""Other"""
24 | "curPORT := 23"
25 | "curENDLINE := ""LF"""
26 | "curENDLINE := ""CRLF"""
27 | "curAPP := ""cmd"""
28 | "promptDETECT := true"
29 | "promptSTART := ""$"""
30 | "promptEND := ""]"""
31 | "log \_1"
32 | "FILEOPEN n,"file.txt",0"
33 | "FILEWRITE n, ""hola"""
34 | "FILECLOSE n "
35 | IFA
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | fulano "el
44 | mengano"
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | ENDIF ELSE ELSEIF
56 |
57 | true false
58 |
59 |
60 | CLEAR CONNECT CONNECTSSH DISCONNECT SENDLN WAIT PAUSE STOP
61 | LOGOPEN LOGWRITE LOGCLOSE LOGPAUSE LOGSTART
62 | FILEOPEN FILECLOSE FILEWRITE
63 | MESSAGEBOX CAPTURE ENDCAPTURE EDIT DETECT_PROMPT
64 |
65 |
66 | IF
67 |
68 | THEN
69 |
70 |
71 | timeout
72 | curIP curTYPE curPORT curENDLINE curAPP
73 | promptDETECT promptSTART promptEND
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/LEEME.md:
--------------------------------------------------------------------------------
1 | Tito-s-Terminal 0.5
2 | ===================
3 |
4 | Terminal con Interfaz gráfica, coloreado de sintaxis y automatización para telnet, y ssh.
5 |
6 | 
7 |
8 | Tito's Terminal empezó como una broma, pero ahora es una aplicación bastante completa y ha migrado recientemente a Lazarus.
9 |
10 | Este terminal puede hacer de cliente para Telnet, SSH, Serial y en general cualquier proceso que maneje consola.
11 |
12 | Para las conexiones Telnet y SSH, usa el conocido [PLink](http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter7.html), pero podría usarse cualquier otro cliente similar.
13 |
14 | Este terminal incluye un panel de texto, que se usa para enviar los comandos al terminal. No es conveniente enviarlos directamente, porque la consola no está preparada para la interacción directa con el usuario.
15 |
16 | La pantalla del terminal, responde de forma similar a un VT100, pero sin las opciones de resaltado (negrita y brillante). Sin embargo, el texto mostrado en el terminal, incluye coloreado de sintaxis (para el lenguaje del Shell de UNIX) y plegado de código.
17 |
18 | El ancho de la pantalla no está limitado por el tamaño del VT100 (que está por defecto en 80 caracteres), sino que puede extenderse hasta varios cientos de caracteres más.
19 |
20 | El terminal se puede configurar para reconocer la llegada del "prompt" del sistema. Además lo resalta con un color especial.
21 |
22 | La detección del prompt, es útil visualmente y también es necesaria para algunas herramientas adicionales que se incluyen en el programa como el Explorador Rremoto y el Editor Remoto.
23 |
24 | El explorador de archivos remoto, funciona interactuando con el terminal, mediante comandos, pero solo para las sesiones Telnet y SSH. De esta forma se puede emular un explorador de archivo en conexiones UNIX/Linux.
25 |
26 | 
27 |
28 | También se incluye un editor remoto, que interactuando, mediante comandos, con el "shell" permite realizar la edición de archivos pequeños, desde dentro del mismo "shell" UNIX/Linux.
29 |
30 | Los editores del programa incluyen resaltado de sintaxis (para diversos lenguajes), plegado de código y autocompletado de código. Estos editores se pueden configurar en su apariencia y se pueden agregar lenguajes nuevos o modificar los que ya existen, en cuanto a resaltado de sintaxis, plegado de código o autocompletado.
31 |
32 | Tito's Terminal también permite la automatización de las conexiones con un lenguaje de macros similar al usado para TeraTerm. Se incluye además, un editor de código preparado exclusivamente para escribir y probar las macros.
33 |
34 | 
35 |
36 | Las funciones de ejecución de macros, así como otras comunes, tienen un acceso directo desde el menú principal o contextual del aplicativo.
37 |
38 | El programa es fuertemente configurable, con innumerables opciones para la apariencia y el modo de trabajo. Para evitar tener que configurar constantemente el entorno, se incluye el manejo de sesiones, que pueden guardar toda la configuración en un solo archivo, y que puede luego recuperarse de forma sencilla, con un par de "Clicks".
39 |
--------------------------------------------------------------------------------
/_source/FormConfig.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":213582195,"name":"tconfig.caption","sourcebytes":[83,101,116,116,105,110,103,115],"value":"Settings"},
3 | {"hash":225639858,"name":"tconfig.bitaplicar.caption","sourcebytes":[65,38,112,108,105,99,97,114],"value":"A&plicar"},
4 | {"hash":230780700,"name":"tconfig.tabgeneral.caption","sourcebytes":[84,97,98,71,101,110,101,114,97,108],"value":"TabGeneral"},
5 | {"hash":140431220,"name":"tconfig.chkopenlast.caption","sourcebytes":[38,79,112,101,110,32,108,97,115,116,32,101,100,105,116,101,100,32,102,105,108,101,32,111,110,32,115,116,97,114,116],"value":"&Open last edited file on start"},
6 | {"hash":7347832,"name":"tconfig.tabfilepath.caption","sourcebytes":[84,97,98,70,105,108,101,80,97,116,104],"value":"TabFilePath"},
7 | {"hash":36817258,"name":"tconfig.lblrutscript.caption","sourcebytes":[38,84,101,109,112,111,114,97,108,32,112,97,116,104,58],"value":"&Temporal path:"},
8 | {"hash":239150074,"name":"tconfig.lblrutmac.caption","sourcebytes":[38,77,97,99,114,111,115,32,112,97,116,104,58],"value":"&Macros path:"},
9 | {"hash":27220154,"name":"tconfig.lblrutleng.caption","sourcebytes":[38,76,101,110,103,117,97,106,101,115,32,112,97,116,104,58],"value":"&Lenguajes path:"},
10 | {"hash":58538948,"name":"tconfig.tabmacsett.caption","sourcebytes":[84,97,98,77,97,99,83,101,116,116],"value":"TabMacSett"},
11 | {"hash":163005752,"name":"tconfig.edtpomax.text","sourcebytes":[101,100,84,112,111,77,97,120],"value":"edTpoMax"},
12 | {"hash":42358953,"name":"tconfig.label1.caption","sourcebytes":[84,105,109,101,111,117,116,46,32,40,115,101,99,111,110,100,115,41],"value":"Timeout. (seconds)"},
13 | {"hash":192462302,"name":"tconfig.chkmarlin.caption","sourcebytes":[72,105,103,104,108,105,103,104,116,32,108,105,110,101,32,116,104,97,116,32,105,115,32,114,117,110,110,105,110,103,46],"value":"Highlight line that is running."},
14 | {"hash":57810548,"name":"tconfig.tabmacedit.caption","sourcebytes":[84,97,98,77,97,99,69,100,105,116],"value":"TabMacEdit"},
15 | {"hash":69190596,"name":"tconfig.tabremededit.caption","sourcebytes":[84,97,98,82,101,109,69,100,69,100,105,116],"value":"TabRemEdEdit"},
16 | {"hash":147089436,"name":"tconfig.tabremexpl.caption","sourcebytes":[84,97,98,82,101,109,69,120,112,108],"value":"TabRemExpl"},
17 | {"hash":192172833,"name":"tconfig.edtpomax1.text","sourcebytes":[101,100,84,112,111,77,97,120,49],"value":"edTpoMax1"},
18 | {"hash":252932458,"name":"tconfig.label2.caption","sourcebytes":[84,105,109,101,32,102,111,114,32,119,97,105,116,105,110,103,32,116,101,114,109,105,110,97,108,32,40,115,101,99,111,110,100,115,41,58],"value":"Time for waiting terminal (seconds):"},
19 | {"hash":19811742,"name":"tconfig.chklistdet.caption","sourcebytes":[83,104,111,119,32,100,101,116,97,105,108,101,100,32,108,105,115,116,32,111,102,32,102,105,108,101,115,46],"value":"Show detailed list of files."},
20 | {"hash":114999027,"name":"tconfig.chkmosocul.caption","sourcebytes":[83,104,111,119,32,104,105,100,100,101,110,32,102,105,108,101,115],"value":"Show hidden files"},
21 | {"hash":227521230,"name":"tconfig.chkrefdesp.caption","sourcebytes":[82,101,102,114,101,115,104,32,108,105,115,116,44,32,97,102,116,101,114,32,97,110,121,32,111,112,101,114,97,116,105,111,110],"value":"Refresh list, after any operation"},
22 | {"hash":86084504,"name":"tconfig.chkmosrut.caption","sourcebytes":[83,104,111,119,32,99,117,114,114,101,110,116,101,32,112,97,116,104],"value":"Show currente path"}
23 | ]}
24 |
--------------------------------------------------------------------------------
/_libraries/Xpres-1.3.2/README.md:
--------------------------------------------------------------------------------
1 | t-Xpres 1.3.2
2 | =============
3 |
4 | Marco de trabajo (framework) para implementar compiladores o intérpretes para lenguajes imperativos y tipados.
5 |
6 | Esta desarrollado con Free Pascal y Lazarus.
7 |
8 | Xpres no es solo una librería, es también una infraestructura que define normas y procedimientos en la creación de intérpretes o compiladores, usando Lazarus. Como ejemplo, se incluyen implementaciones simples de un intérprete y un compilador.
9 |
10 | El framework, incluye las siguientes dependencias:
11 |
12 | * Paquete SynEdit. Que viene incluido en Lazarus. Se requiere para poder usar la librería SynfacilSyn. No significa que debe usarse el componente SynEdit, sino que el resaltador SynfacilSyn, usa clases definidas en este paquete.
13 | * Librería SynFacilSyn https://github.com/t-edson/SynFacilSyn. Necesaria porque se usará al resaltador de sintaxis SynfacilSyn, como analizador léxico. Xpres no implementa un analizador léxico propio.
14 | * Librería MisUtils https://github.com/t-edson/MisUtils. Usada para permitir la traducción de los mensajes de error.
15 |
16 | Xpres está diseñado para trabajar con el paquete SynEdit de Lazarus. Esto implica que para implementar un intérprete/compilador, se debe usar el paquete SynEdit, siempre. La arquitectura planteada no implica el uso de SynEdit como editor, pero si se requiere de algunas clases definidas en el paquete SynEdit, para el analizador léxico.
17 |
18 | Además, al ser el analizador léxico, también un resaltador de sintaxis, se puede resaltar el código fuente con las mismas rutinas del analizador léxico, sin necesidad de implementar algún otro resaltador. De esta forma se garantiza una correspondencia al 100% entre los tokens del analizador léxico, y el coloreado que se puede lograr en pantalla.
19 |
20 | Hay que notar que de SynFacilSyn, solo se está usando su capacidad de lexer, más no de manejo de bloques de sintaxis. De momento los bloques de sintaxis en Xpres, los maneja internamente el analizador sintáctico.
21 |
22 | La librería Xpres, incluye a los siguientes archivos:
23 |
24 | * "XpresBas.pas". Unidad con rutinas básicas del framework. Incluye el métodos para el manejo del texto fuente y el procesamiento de errores. Por lo general no debería modificarse. Funciona como una capa que se coloca sobre el analizador léxico o "lexer".
25 | * "XpresTypes.pas". Unidad con las definiciones referidas a los tipos-operadores-operaciones. Es también una unidad básica del framework.
26 | * "XpresParser.pas". Unidad con rutinas principales del framework. Incluyen el analizador sintáctivo o "parser". Incluye el analizador de expresiones y de las estructuras del lenguaje. No debería cambiar si el lenguaje sigue la línea del lenguaje Xpres.
27 | * "XpresElements.pas". Unidad que define los elementos de la sintaxis, como constantes, variables, procedimientos y funciones.
28 |
29 | Para la implementación de un Intérprete o Generador de código. Se debe crear una unidad que incluya a "XpresParser.pas" y "XpresTypes.pas" y ahí definir a una clase (p. ej. TCompiler o TInterpreter) que descienda de la clase TCompilerBase.
30 |
31 | Los generadores de código pueden desarrollarse para generar código intermedio, como el bytecode de Java, o cualquier otro. Este proyecto no incluye ninguna máquina virtual.
32 |
33 | En los ejemplos se incluye un caso minimalista con intérprete y un ejemplo de compilador elemental para el intel 8086 en 16 bits.
34 |
35 | El ejemplo de compilador incluye también una IDE sencilla. Solo permite manejar variables, expresiones numéricas y de cadena.
36 |
37 | Xpres, puede ser usado también cuando se requiere implementar un lexer, un parser, un árbol de sintaxis, o un evaluador de expresiones.
38 |
39 | Para más información sobrfe Xpres, revisar la documentación técnica.
40 |
--------------------------------------------------------------------------------
/languages/ObjectPascal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | "begin
end;"
6 | "if expresion then begin
end;"
7 | "if expresion then begin
end else begin
end;"
8 | "while expresion do begin
end;"
9 |
10 |
11 |
12 |
13 | absolute and array asm as
14 | begin
15 | case const constructor class
16 | destructor div do downto dispose
17 | else end exit except exports
18 | for function file finalization finally
19 | goto
20 | if implementation in inherited inline interface initialization is
21 | library label
22 | mod
23 | not nil new
24 | or object of on operator out
25 | procedure property public private packed program
26 | repeat record reintroduce raise
27 | string self set shl shr
28 | then to try true type threadvar
29 | unit until uses
30 | var
31 | while with
32 | xor
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | Repeat
72 | Until
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/languages/DOS_shell.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | alias ar asa awk
5 | "awk '{}'"
6 | "awk -F. '{print $1}'"
7 | banner basename bash bc bdiff break bunzip2 bzip2
8 | "case"
9 | "case $x in
10 | 1)
echo ""uno""
11 | ;;
12 | 2)
echo ""dos""
13 | ;;
14 | *)
echo ""otro""
15 | ;;
16 | esac"
17 | "cat " "cd " "cd .." "chgrp "
18 | "chmod " "chmod 755" "chmod 777"
19 | "chown"
20 | "chown usuario directorio/archivo"
21 | "continue"
22 | "cp "
23 | "cp origen destino"
24 | "crontab "
25 | "crontab -l"
26 | "crontab -l | grep "
27 | "date"
28 | "date +%Y%m%d %H%M%S"
29 | "df"
30 | "df -k"
31 | "df -k | grep "
32 | "do"
33 | "done"
34 | "du"
35 | "du -k"
36 | "echo"
37 | "echo """""
38 | "elif "
39 | "else"
40 | "esac"
41 | "exit"
42 | "expr"
43 | "fcopy"
44 | "fi"
45 | "for "
46 | "for variable in $lista
do
done"
47 | "format"
48 | "ftp "
49 | "grep "
50 | "head "
51 | "id "
52 | "if "
53 | "if [ expresíon ]; then
fi"
54 | "if [ expresíon ]; then
else
fi"
55 | "in"
56 | "join "
57 | "kill"
58 | "kill -9 "
59 | "ln"
60 | "ls"
61 | "ls -l"
62 | "mail"
63 | "man"
64 | "mkdir"
65 | "mv "
66 | "mv origen destino"
67 | "nawk "
68 | "nawk -F. ""{print $1}"""
69 | "ping"
70 | "passwd"
71 | "passwd usuario"
72 | "pwd"
73 | "ps "
74 | "ps -fu"
75 | "rm "
76 | "rmdir "
77 | "sleep "
78 | "sort"
79 | "tail "
80 | "tar"
81 | "telnet"
82 | "then"
83 | "top "
84 | "tty "
85 | "uname"
86 | "uniq"
87 | "until"
88 | "useradd"
89 | "useradd usuario"
90 | "vi "
91 | "vmstat "
92 | "wc "
93 | "wc -l "
94 | "while "
95 | "while [ exprsion ]; do
done"
96 | "who "
97 | "write "
98 |
99 |
100 |
101 |
102 |
103 |
104 | ANSI.SYS ATTRIB APPEND ASSIGN
105 | BACKUP BASIC BAT BREAK BUFFERS
106 | CHKDSK COPY CALL CD CHCP CHDIR CHKSTATE.SYS CHOICE CLS COMMAND CONFIG.SYS COUNTRY
107 | DIR DATE DBLSPACE DBLSPACE.SYS DEBUG DEFRAG DEL DELOLDOS DELTREE DEVICE DEVICEHIGH DISKCOMP DISKCOPY DISPLAY.SYS DOS DOSKEY DOSSHELL DRIVER.SYS DRIVPARM DRIVESPACE
108 | EDIT ECHO EMM386 EMM386.EXE ERASE ERROLEVEL EXE2BIN EXIT EXPAND
109 | FDISK FORMAT FASTHELP FASTOPEN FC FCBS FILES FIND FOR GOTO
110 | GRAFTABL GRAPHIC GWBASIC
111 | HELP HIMEM.SYS
112 | IF INCLUDE INTERLNK INTERLNK.EXE INTERSVR INSTALL
113 | JOIN
114 | KEYB
115 | LABEL LASTDRIVE LH LINK LOADFIX LOADHIGH
116 | MD MSCDEX MACROS MEM MEMMAKER MENUCOLOR MENUDEFAULT MENUITEM MIRROR MKDIR MODE MORE MOVE MSAV MSBACKUP MSD
117 | NLSFUNC NUMLOCK
118 | PATH PAUSE POWER POWER.EXE PRINT PRINTER.SYS PROMPT
119 | QBASIC
120 | RAMDRIVE RD RECOVER REM REN RENAME REPLACE RESTORE RMDIR
121 | SCANDISK SET SETVER SETVER.EXE SHARE SHELL SHIFT SHIPDISK SIZER.EXE SMARTDRV SMARTDRV.EXE SMARTMON SORT STACKS SUBMENU SUBST SWITCHES SYS
122 | TEMP TIME TREE TYPE
123 | UNDELETE UNFORMAT
124 | VDISK VER VERIFY VOL VSAFE
125 | XCOPY
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Tito-s-Terminal 0.8.4
2 | =====================
3 |
4 | Terminal with graphical interface, syntax highlighting and automation for telnet, ssh, serial or any command line proccess.
5 |
6 | 
7 |
8 | For Telnet and SSH connections, use the well-known [PLink](http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter7.html), program but any other similar client could be used.
9 |
10 | The program is strongly configurable, with innumerable options for the appearance and the way of working. To avoid having to constantly configure the environment, session management is included, which can save all the configuration in a single file, and which can then be easily recovered, with a couple of "Clicks".
11 |
12 | ## Sessions
13 |
14 | Connections are managed using sessions. A session is a document that includes all parameters of a typical connection like a SSH, or TELNET sesion.
15 |
16 | Unlike other similar programs, here, the sessions include a text panel (Command Panel), and a Terminal windows. The Command panel is used to send the commands to the terminal. It is not convenient to send them directly, because the console is not prepared for direct interaction with the user.
17 |
18 | The terminal screen responds in a similar way to a VT100 console, but without the highlight options (color, bold and bright). However, the text displayed in the terminal includes syntax coloring (for the UNIX Shell language) and code folding.
19 |
20 | The width of the screen is not limited by the size of the VT100 (which defaults to 80 characters),. It can be extended up to several hundred more characters.
21 |
22 | ## Setting a connection
23 |
24 | When creating a new session, the settings form is shown to set the connection parameters.
25 |
26 | 
27 |
28 | Here you can define the type of connection and the connection parameters. You can also define additional parameters, such as the appearance of the window or the behavior of the terminal. All these settings will be saved in the session.
29 |
30 | If you want to handle an external program by command line, you must select the option "Other".
31 |
32 | For example, if you want to interact with the Windows command interpreter, you must use the "cmd" program.
33 |
34 | 
35 |
36 | ## Prompt Detection
37 |
38 | The terminal can be configured to recognize the arrival of the system prompt. It also highlights it with a special color.
39 |
40 | Prompt detection is visually useful and is also necessary for some additional tools that are included in the program such as Remote Explorer and Remote Editor.
41 |
42 | The prompt detection is not done directly. It must first be configured in the terminal. This is done from the "General> Prompt detection" option from the session properties window:
43 |
44 | 
45 |
46 |
47 | Prompt detection is based on the fact that it is possible to completely identify the Prompt on a line, defining the initial and final characters that delimit it.
48 |
49 | In the figure shown, the characters "[" and "] $" have been defined for the prompt. In this way, the following prompts can be recognized:
50 |
51 | * [user @ host] $
52 | * [user @ localhost ~] $
53 | * [CMD] $
54 |
55 | # Tools
56 |
57 | The remote file browser works by interacting with the terminal, through commands, but only for Telnet and SSH sessions. In this way a file browser can be emulated on UNIX / Linux connections.
58 |
59 | 
60 |
61 | A remote editor is also included, which interacting, through commands, with the "shell" allows editing of small files, from within the same "shell" UNIX / Linux.
62 |
63 | The remote editor includes syntax highlighting (for various languages), code folding, and code autocompletion.
64 |
65 | # Macros
66 |
67 | Tito's Terminal also allows the automation of connections with a macro language similar to that used for TeraTerm. It also includes a code editor prepared exclusively for writing and testing macros.
68 |
69 | 
70 |
71 | The macro execution functions, have a direct access from the main menu.
72 |
73 |
--------------------------------------------------------------------------------
/_source/FormEditRemoto.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":238850223,"name":"tfrmeditremoto.caption","sourcebytes":[69,100,105,116,111,114,32,82,101,109,111,116,111],"value":"Editor Remoto"},
3 | {"hash":106991073,"name":"tfrmeditremoto.toolbar1.caption","sourcebytes":[84,111,111,108,66,97,114,49],"value":"ToolBar1"},
4 | {"hash":160486421,"name":"tfrmeditremoto.toolbutton5.caption","sourcebytes":[84,111,111,108,66,117,116,116,111,110,53],"value":"ToolButton5"},
5 | {"hash":177351,"name":"tfrmeditremoto.acfilnew.caption","sourcebytes":[38,78,101,119],"value":"&New"},
6 | {"hash":221594079,"name":"tfrmeditremoto.acfilnew.hint","sourcebytes":[78,117,101,118,111,32,65,114,99,104,105,118,111],"value":"Nuevo Archivo"},
7 | {"hash":191283502,"name":"tfrmeditremoto.acfilopen.caption","sourcebytes":[38,79,112,101,110,46,46],"value":"&Open.."},
8 | {"hash":252769487,"name":"tfrmeditremoto.acfilopen.hint","sourcebytes":[65,98,114,105,114,32,65,114,99,104,105,118,111],"value":"Abrir Archivo"},
9 | {"hash":2857157,"name":"tfrmeditremoto.acfilsave.caption","sourcebytes":[38,83,97,118,101],"value":"&Save"},
10 | {"hash":211519,"name":"tfrmeditremoto.acfilsave.hint","sourcebytes":[71,117,97,114,100,97,114,32,65,114,99,104,105,118,111],"value":"Guardar Archivo"},
11 | {"hash":105773166,"name":"tfrmeditremoto.acfilsaveas.caption","sourcebytes":[83,97,118,101,32,97,38,115,32,46,46,46],"value":"Save a&s ..."},
12 | {"hash":48950238,"name":"tfrmeditremoto.acfilsaveas.hint","sourcebytes":[71,117,97,114,100,97,114,32,99,111,109,111,46,46,46],"value":"Guardar como..."},
13 | {"hash":2805508,"name":"tfrmeditremoto.acfilexit.caption","sourcebytes":[38,69,120,105,116],"value":"&Exit"},
14 | {"hash":5866242,"name":"tfrmeditremoto.acfilexit.hint","sourcebytes":[83,97,108,105,114],"value":"Salir"},
15 | {"hash":2868399,"name":"tfrmeditremoto.acediundo.caption","sourcebytes":[38,85,110,100,111],"value":"&Undo"},
16 | {"hash":211713378,"name":"tfrmeditremoto.acediundo.hint","sourcebytes":[68,101,115,104,97,99,101,114],"value":"Deshacer"},
17 | {"hash":2853807,"name":"tfrmeditremoto.acediredo.caption","sourcebytes":[38,82,101,100,111],"value":"&Redo"},
18 | {"hash":146700690,"name":"tfrmeditremoto.acediredo.hint","sourcebytes":[82,101,104,97,99,101,114],"value":"Rehacer"},
19 | {"hash":305108,"name":"tfrmeditremoto.acedicut.caption","sourcebytes":[67,117,38,116],"value":"Cu&t"},
20 | {"hash":78027394,"name":"tfrmeditremoto.acedicut.hint","sourcebytes":[67,111,114,116,97,114],"value":"Cortar"},
21 | {"hash":2795129,"name":"tfrmeditremoto.acedicopy.caption","sourcebytes":[38,67,111,112,121],"value":"&Copy"},
22 | {"hash":78016386,"name":"tfrmeditremoto.acedicopy.hint","sourcebytes":[67,111,112,105,97,114],"value":"Copiar"},
23 | {"hash":45517477,"name":"tfrmeditremoto.acedipaste.caption","sourcebytes":[38,80,97,115,116,101],"value":"&Paste"},
24 | {"hash":5684610,"name":"tfrmeditremoto.acedipaste.hint","sourcebytes":[80,101,103,97,114],"value":"Pegar"},
25 | {"hash":171665052,"name":"tfrmeditremoto.acediselecall.caption","sourcebytes":[83,101,108,101,99,116,32,38,65,108,108],"value":"Select &All"},
26 | {"hash":157004287,"name":"tfrmeditremoto.acediselecall.hint","sourcebytes":[83,101,108,101,99,99,105,111,110,97,32,116,111,100,111,32,101,108,32,116,101,120,116,111],"value":"Selecciona todo el texto"},
27 | {"hash":7110642,"name":"tfrmeditremoto.acviewlinnum.caption","sourcebytes":[76,105,110,101,32,38,78,117,109,98,101,114],"value":"Line &Number"},
28 | {"hash":200196610,"name":"tfrmeditremoto.acviewstabar.caption","sourcebytes":[38,83,116,97,116,117,115,32,98,97,114],"value":"&Status bar"},
29 | {"hash":143264446,"name":"tfrmeditremoto.acsrchsearch.caption","sourcebytes":[83,101,97,114,99,104,46,46,46],"value":"Search..."},
30 | {"hash":263373924,"name":"tfrmeditremoto.acsrchsearchnext.caption","sourcebytes":[83,101,97,114,99,104,32,38,78,101,120,116],"value":"Search &Next"},
31 | {"hash":87029806,"name":"tfrmeditremoto.acsrchreplace.caption","sourcebytes":[38,82,101,112,108,97,99,101,32,46,46,46],"value":"&Replace ..."},
32 | {"hash":125621404,"name":"tfrmeditremoto.acviewfilpanel.caption","sourcebytes":[38,70,73,108,101,32,80,97,110,101,108],"value":"&FIle Panel"},
33 | {"hash":230342035,"name":"tfrmeditremoto.actoolsettings.caption","sourcebytes":[83,101,38,116,116,105,110,103,115],"value":"Se&ttings"},
34 | {"hash":44853633,"name":"tfrmeditremoto.actoolsettings.hint","sourcebytes":[67,111,110,102,105,103,117,114,97,114,32,108,97,32,101,100,105,99,105,195,179,110,32,114,101,109,111,116,97],"value":"Configurar la edici\u00F3n remota"},
35 | {"hash":2805797,"name":"tfrmeditremoto.menuitem1.caption","sourcebytes":[38,70,105,108,101],"value":"&File"},
36 | {"hash":146392547,"name":"tfrmeditremoto.mnrecents.caption","sourcebytes":[82,101,99,101,110,116,115],"value":"Recents"},
37 | {"hash":2800388,"name":"tfrmeditremoto.menuitem2.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"},
38 | {"hash":45835827,"name":"tfrmeditremoto.menuitem17.caption","sourcebytes":[38,84,111,111,108,115],"value":"&Tools"},
39 | {"hash":139369717,"name":"tfrmeditremoto.mnlenguaje.caption","sourcebytes":[38,76,97,110,103,117,97,103,101],"value":"&Language"}
40 | ]}
41 |
--------------------------------------------------------------------------------
/_source/FormRemoteEditor.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":79367010,"name":"tfrmremoteeditor.caption","sourcebytes":[69,100,105,116,111,114],"value":"Editor"},
3 | {"hash":106991073,"name":"tfrmremoteeditor.toolbar1.caption","sourcebytes":[84,111,111,108,66,97,114,49],"value":"ToolBar1"},
4 | {"hash":160486421,"name":"tfrmremoteeditor.toolbutton5.caption","sourcebytes":[84,111,111,108,66,117,116,116,111,110,53],"value":"ToolButton5"},
5 | {"hash":177351,"name":"tfrmremoteeditor.acfilnew.caption","sourcebytes":[38,78,101,119],"value":"&New"},
6 | {"hash":221594079,"name":"tfrmremoteeditor.acfilnew.hint","sourcebytes":[78,117,101,118,111,32,65,114,99,104,105,118,111],"value":"Nuevo Archivo"},
7 | {"hash":191283502,"name":"tfrmremoteeditor.acfilopen.caption","sourcebytes":[38,79,112,101,110,46,46],"value":"&Open.."},
8 | {"hash":252769487,"name":"tfrmremoteeditor.acfilopen.hint","sourcebytes":[65,98,114,105,114,32,65,114,99,104,105,118,111],"value":"Abrir Archivo"},
9 | {"hash":2857157,"name":"tfrmremoteeditor.acfilsave.caption","sourcebytes":[38,83,97,118,101],"value":"&Save"},
10 | {"hash":211519,"name":"tfrmremoteeditor.acfilsave.hint","sourcebytes":[71,117,97,114,100,97,114,32,65,114,99,104,105,118,111],"value":"Guardar Archivo"},
11 | {"hash":105773166,"name":"tfrmremoteeditor.acfilsaveas.caption","sourcebytes":[83,97,118,101,32,97,38,115,32,46,46,46],"value":"Save a&s ..."},
12 | {"hash":48950238,"name":"tfrmremoteeditor.acfilsaveas.hint","sourcebytes":[71,117,97,114,100,97,114,32,99,111,109,111,46,46,46],"value":"Guardar como..."},
13 | {"hash":2805508,"name":"tfrmremoteeditor.acfilexit.caption","sourcebytes":[38,69,120,105,116],"value":"&Exit"},
14 | {"hash":5866242,"name":"tfrmremoteeditor.acfilexit.hint","sourcebytes":[83,97,108,105,114],"value":"Salir"},
15 | {"hash":2868399,"name":"tfrmremoteeditor.acediundo.caption","sourcebytes":[38,85,110,100,111],"value":"&Undo"},
16 | {"hash":211713378,"name":"tfrmremoteeditor.acediundo.hint","sourcebytes":[68,101,115,104,97,99,101,114],"value":"Deshacer"},
17 | {"hash":2853807,"name":"tfrmremoteeditor.acediredo.caption","sourcebytes":[38,82,101,100,111],"value":"&Redo"},
18 | {"hash":146700690,"name":"tfrmremoteeditor.acediredo.hint","sourcebytes":[82,101,104,97,99,101,114],"value":"Rehacer"},
19 | {"hash":305108,"name":"tfrmremoteeditor.acedicut.caption","sourcebytes":[67,117,38,116],"value":"Cu&t"},
20 | {"hash":78027394,"name":"tfrmremoteeditor.acedicut.hint","sourcebytes":[67,111,114,116,97,114],"value":"Cortar"},
21 | {"hash":2795129,"name":"tfrmremoteeditor.acedicopy.caption","sourcebytes":[38,67,111,112,121],"value":"&Copy"},
22 | {"hash":78016386,"name":"tfrmremoteeditor.acedicopy.hint","sourcebytes":[67,111,112,105,97,114],"value":"Copiar"},
23 | {"hash":45517477,"name":"tfrmremoteeditor.acedipaste.caption","sourcebytes":[38,80,97,115,116,101],"value":"&Paste"},
24 | {"hash":5684610,"name":"tfrmremoteeditor.acedipaste.hint","sourcebytes":[80,101,103,97,114],"value":"Pegar"},
25 | {"hash":171665052,"name":"tfrmremoteeditor.acediselecall.caption","sourcebytes":[83,101,108,101,99,116,32,38,65,108,108],"value":"Select &All"},
26 | {"hash":157004287,"name":"tfrmremoteeditor.acediselecall.hint","sourcebytes":[83,101,108,101,99,99,105,111,110,97,32,116,111,100,111,32,101,108,32,116,101,120,116,111],"value":"Selecciona todo el texto"},
27 | {"hash":7110642,"name":"tfrmremoteeditor.acviewlinnum.caption","sourcebytes":[76,105,110,101,32,38,78,117,109,98,101,114],"value":"Line &Number"},
28 | {"hash":200196610,"name":"tfrmremoteeditor.acviewstabar.caption","sourcebytes":[38,83,116,97,116,117,115,32,98,97,114],"value":"&Status bar"},
29 | {"hash":143264446,"name":"tfrmremoteeditor.acsrchsearch.caption","sourcebytes":[83,101,97,114,99,104,46,46,46],"value":"Search..."},
30 | {"hash":263373924,"name":"tfrmremoteeditor.acsrchsearchnext.caption","sourcebytes":[83,101,97,114,99,104,32,38,78,101,120,116],"value":"Search &Next"},
31 | {"hash":87029806,"name":"tfrmremoteeditor.acsrchreplace.caption","sourcebytes":[38,82,101,112,108,97,99,101,32,46,46,46],"value":"&Replace ..."},
32 | {"hash":125621404,"name":"tfrmremoteeditor.acviewfilpanel.caption","sourcebytes":[38,70,73,108,101,32,80,97,110,101,108],"value":"&FIle Panel"},
33 | {"hash":230342035,"name":"tfrmremoteeditor.actoolsettings.caption","sourcebytes":[83,101,38,116,116,105,110,103,115],"value":"Se&ttings"},
34 | {"hash":44853633,"name":"tfrmremoteeditor.actoolsettings.hint","sourcebytes":[67,111,110,102,105,103,117,114,97,114,32,108,97,32,101,100,105,99,105,195,179,110,32,114,101,109,111,116,97],"value":"Configurar la edici\u00F3n remota"},
35 | {"hash":2805797,"name":"tfrmremoteeditor.menuitem1.caption","sourcebytes":[38,70,105,108,101],"value":"&File"},
36 | {"hash":146392547,"name":"tfrmremoteeditor.mnrecents.caption","sourcebytes":[82,101,99,101,110,116,115],"value":"Recents"},
37 | {"hash":2800388,"name":"tfrmremoteeditor.menuitem2.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"},
38 | {"hash":45835827,"name":"tfrmremoteeditor.menuitem17.caption","sourcebytes":[38,84,111,111,108,115],"value":"&Tools"},
39 | {"hash":139369717,"name":"tfrmremoteeditor.mnlenguaje.caption","sourcebytes":[38,76,97,110,103,117,97,103,101],"value":"&Language"}
40 | ]}
41 |
--------------------------------------------------------------------------------
/_source/FormEditMacros.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":111547395,"name":"tfrmeditmacros.caption","sourcebytes":[102,114,109,69,100,105,116,77,97,99,114,111,115],"value":"frmEditMacros"},
3 | {"hash":106991073,"name":"tfrmeditmacros.toolbar1.caption","sourcebytes":[84,111,111,108,66,97,114,49],"value":"ToolBar1"},
4 | {"hash":160486421,"name":"tfrmeditmacros.toolbutton5.caption","sourcebytes":[84,111,111,108,66,117,116,116,111,110,53],"value":"ToolButton5"},
5 | {"hash":151863761,"name":"tfrmeditmacros.toolbutton11.caption","sourcebytes":[84,111,111,108,66,117,116,116,111,110,49,49],"value":"ToolButton11"},
6 | {"hash":177351,"name":"tfrmeditmacros.acfilnew.caption","sourcebytes":[38,78,101,119],"value":"&New"},
7 | {"hash":221594079,"name":"tfrmeditmacros.acfilnew.hint","sourcebytes":[78,117,101,118,111,32,65,114,99,104,105,118,111],"value":"Nuevo Archivo"},
8 | {"hash":107746238,"name":"tfrmeditmacros.acfilopen.caption","sourcebytes":[38,79,112,101,110,46,46,46],"value":"&Open..."},
9 | {"hash":252769487,"name":"tfrmeditmacros.acfilopen.hint","sourcebytes":[65,98,114,105,114,32,65,114,99,104,105,118,111],"value":"Abrir Archivo"},
10 | {"hash":2857157,"name":"tfrmeditmacros.acfilsave.caption","sourcebytes":[38,83,97,118,101],"value":"&Save"},
11 | {"hash":211519,"name":"tfrmeditmacros.acfilsave.hint","sourcebytes":[71,117,97,114,100,97,114,32,65,114,99,104,105,118,111],"value":"Guardar Archivo"},
12 | {"hash":73723262,"name":"tfrmeditmacros.acfilsaveas.caption","sourcebytes":[83,97,118,101,32,65,38,115,46,46,46],"value":"Save A&s..."},
13 | {"hash":48950238,"name":"tfrmeditmacros.acfilsaveas.hint","sourcebytes":[71,117,97,114,100,97,114,32,99,111,109,111,46,46,46],"value":"Guardar como..."},
14 | {"hash":4710148,"name":"tfrmeditmacros.acfilexit.caption","sourcebytes":[69,38,120,105,116],"value":"E&xit"},
15 | {"hash":5866242,"name":"tfrmeditmacros.acfilexit.hint","sourcebytes":[83,97,108,105,114],"value":"Salir"},
16 | {"hash":2868399,"name":"tfrmeditmacros.acediundo.caption","sourcebytes":[38,85,110,100,111],"value":"&Undo"},
17 | {"hash":211713378,"name":"tfrmeditmacros.acediundo.hint","sourcebytes":[68,101,115,104,97,99,101,114],"value":"Deshacer"},
18 | {"hash":2853807,"name":"tfrmeditmacros.acediredo.caption","sourcebytes":[38,82,101,100,111],"value":"&Redo"},
19 | {"hash":146700690,"name":"tfrmeditmacros.acediredo.hint","sourcebytes":[82,101,104,97,99,101,114],"value":"Rehacer"},
20 | {"hash":305108,"name":"tfrmeditmacros.acedicut.caption","sourcebytes":[67,117,38,116],"value":"Cu&t"},
21 | {"hash":78027394,"name":"tfrmeditmacros.acedicut.hint","sourcebytes":[67,111,114,116,97,114],"value":"Cortar"},
22 | {"hash":2795129,"name":"tfrmeditmacros.acedicopy.caption","sourcebytes":[38,67,111,112,121],"value":"&Copy"},
23 | {"hash":78016386,"name":"tfrmeditmacros.acedicopy.hint","sourcebytes":[67,111,112,105,97,114],"value":"Copiar"},
24 | {"hash":45517477,"name":"tfrmeditmacros.acedipaste.caption","sourcebytes":[38,80,97,115,116,101],"value":"&Paste"},
25 | {"hash":5684610,"name":"tfrmeditmacros.acedipaste.hint","sourcebytes":[80,101,103,97,114],"value":"Pegar"},
26 | {"hash":171665052,"name":"tfrmeditmacros.acediselecall.caption","sourcebytes":[83,101,108,101,99,116,32,38,65,108,108],"value":"Select &All"},
27 | {"hash":157004287,"name":"tfrmeditmacros.acediselecall.hint","sourcebytes":[83,101,108,101,99,99,105,111,110,97,32,116,111,100,111,32,101,108,32,116,101,120,116,111],"value":"Selecciona todo el texto"},
28 | {"hash":156299761,"name":"tfrmeditmacros.acvernumlin.caption","sourcebytes":[86,101,114,32,38,78,195,186,109,46,32,100,101,32,76,195,173,110,101,97],"value":"Ver &N\u00FAm. de L\u00EDnea"},
29 | {"hash":246975967,"name":"tfrmeditmacros.acverbarest.caption","sourcebytes":[86,101,114,32,66,97,114,114,97,32,100,101,32,38,69,115,116,97,100,111],"value":"Ver Barra de &Estado"},
30 | {"hash":143264446,"name":"tfrmeditmacros.acsrchsearch.caption","sourcebytes":[83,101,97,114,99,104,46,46,46],"value":"Search..."},
31 | {"hash":263373924,"name":"tfrmeditmacros.acsrchsearchnext.caption","sourcebytes":[83,101,97,114,99,104,32,38,78,101,120,116],"value":"Search &Next"},
32 | {"hash":38997374,"name":"tfrmeditmacros.acsrchreplace.caption","sourcebytes":[38,82,101,112,108,97,99,101,46,46,46],"value":"&Replace..."},
33 | {"hash":189951491,"name":"tfrmeditmacros.acverpanarc.caption","sourcebytes":[80,97,110,101,108,32,100,101,32,38,65,114,99,104,105,118,111,115],"value":"Panel de &Archivos"},
34 | {"hash":216772101,"name":"tfrmeditmacros.acherejec.caption","sourcebytes":[38,69,120,101,99,117,116,101],"value":"&Execute"},
35 | {"hash":2861920,"name":"tfrmeditmacros.acherdeten.caption","sourcebytes":[38,83,116,111,112],"value":"&Stop"},
36 | {"hash":206860878,"name":"tfrmeditmacros.acherdeten.hint","sourcebytes":[38,68,101,116,101,110,101,114,32,101,106,101,99,117,99,105,195,179,110],"value":"&Detener ejecuci\u00F3n"},
37 | {"hash":193701540,"name":"tfrmeditmacros.achergrab.caption","sourcebytes":[38,82,101,99,111,114,100],"value":"&Record"},
38 | {"hash":213577587,"name":"tfrmeditmacros.acherconfig.caption","sourcebytes":[38,83,101,116,116,105,110,103,115],"value":"&Settings"},
39 | {"hash":2805797,"name":"tfrmeditmacros.mnarchivo.caption","sourcebytes":[38,70,105,108,101],"value":"&File"},
40 | {"hash":146392835,"name":"tfrmeditmacros.mnrecientes.caption","sourcebytes":[38,82,101,99,101,110,116,115],"value":"&Recents"},
41 | {"hash":2800388,"name":"tfrmeditmacros.mnedicion.caption","sourcebytes":[38,69,100,105,116],"value":"&Edit"},
42 | {"hash":45835827,"name":"tfrmeditmacros.mnherram.caption","sourcebytes":[38,84,111,111,108,115],"value":"&Tools"}
43 | ]}
44 |
--------------------------------------------------------------------------------
/_source/FormPrincipal.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":128846556,"name":"tfrmprincipal.caption","sourcebytes":[84,105,116,111,39,115,32,84,101,114,109,105,110,97,108],"value":"Tito's Terminal"},
3 | {"hash":2805797,"name":"tfrmprincipal.mnfile.caption","sourcebytes":[38,70,105,108,101],"value":"&File"},
4 | {"hash":170385011,"name":"tfrmprincipal.mnsesionesalm.caption","sourcebytes":[83,38,116,111,114,101,100,32,83,101,115,115,105,111,110,115],"value":"S&tored Sessions"},
5 | {"hash":146392835,"name":"tfrmprincipal.mnrecents.caption","sourcebytes":[38,82,101,99,101,110,116,115],"value":"&Recents"},
6 | {"hash":2871239,"name":"tfrmprincipal.mnview.caption","sourcebytes":[38,86,105,101,119],"value":"&View"},
7 | {"hash":188197187,"name":"tfrmprincipal.mnmacros.caption","sourcebytes":[38,77,97,99,114,111,115],"value":"&Macros"},
8 | {"hash":196662415,"name":"tfrmprincipal.mnejecmacro.caption","sourcebytes":[38,69,120,101,99,117,116,101,32,77,97,99,114,111],"value":"&Execute Macro"},
9 | {"hash":7871567,"name":"tfrmprincipal.mnabrmacro.caption","sourcebytes":[38,79,112,101,110,32,77,97,99,114,111],"value":"&Open Macro"},
10 | {"hash":45835827,"name":"tfrmprincipal.mntools.caption","sourcebytes":[38,84,111,111,108,115],"value":"&Tools"},
11 | {"hash":2812976,"name":"tfrmprincipal.mnhelp.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"},
12 | {"hash":28145806,"name":"tfrmprincipal.acfilqckconnec.caption","sourcebytes":[38,81,117,105,99,107,32,99,111,110,110,101,99,116,105,111,110,32,46,46,46],"value":"&Quick connection ..."},
13 | {"hash":137937646,"name":"tfrmprincipal.acfilqckconnec.hint","sourcebytes":[65,98,114,101,32,117,110,97,32,110,117,101,118,97,32,99,111,110,101,120,105,195,179,110],"value":"Abre una nueva conexi\u00F3n"},
14 | {"hash":192829198,"name":"tfrmprincipal.acfilnewses.caption","sourcebytes":[38,78,101,119,32,83,101,115,115,105,111,110],"value":"&New Session"},
15 | {"hash":3317102,"name":"tfrmprincipal.acfilopeses.caption","sourcebytes":[38,79,112,101,110,32,83,101,115,115,105,111,110,32,46,46,46],"value":"&Open Session ..."},
16 | {"hash":231859870,"name":"tfrmprincipal.acfilopeses.hint","sourcebytes":[65,98,114,101,32,117,110,32,97,114,99,104,105,118,111,32,100,101,32,115,101,115,105,195,179,110],"value":"Abre un archivo de sesi\u00F3n"},
17 | {"hash":38951214,"name":"tfrmprincipal.acfilsavses.caption","sourcebytes":[38,83,97,118,101,32,83,101,115,115,105,111,110],"value":"&Save Session"},
18 | {"hash":224848972,"name":"tfrmprincipal.acfilsavses.hint","sourcebytes":[71,117,97,114,100,97,32,108,97,32,115,101,115,105,195,179,110,32,97,99,116,117,97,108],"value":"Guarda la sesi\u00F3n actual"},
19 | {"hash":105752414,"name":"tfrmprincipal.acfilsavsesas.caption","sourcebytes":[83,97,118,101,32,83,101,115,105,115,195,179,110,32,65,115,32,46,46,46],"value":"Save Sesis\u00F3n As ..."},
20 | {"hash":266067429,"name":"tfrmprincipal.acfilsavsesas.hint","sourcebytes":[71,117,97,114,100,97,114,32,115,101,115,105,195,179,110,32,105,110,100,105,99,97,110,100,111,32,117,110,32,110,111,109,98,114,101],"value":"Guardar sesi\u00F3n indicando un nombre"},
21 | {"hash":138688974,"name":"tfrmprincipal.acfilnewwin.caption","sourcebytes":[78,101,119,32,38,87,105,110,100,111,119,46,46,46],"value":"New &Window..."},
22 | {"hash":244932577,"name":"tfrmprincipal.acfilnewwin.hint","sourcebytes":[65,98,114,101,32,117,110,97,32,110,117,101,118,97,32,86,101,110,116,97,110,97],"value":"Abre una nueva Ventana"},
23 | {"hash":4710148,"name":"tfrmprincipal.acfilexit.caption","sourcebytes":[69,38,120,105,116],"value":"E&xit"},
24 | {"hash":5866242,"name":"tfrmprincipal.acfilexit.hint","sourcebytes":[83,97,108,105,114],"value":"Salir"},
25 | {"hash":197190146,"name":"tfrmprincipal.acviewstatusbar.caption","sourcebytes":[83,116,97,116,117,115,32,66,97,114],"value":"Status Bar"},
26 | {"hash":26051855,"name":"tfrmprincipal.acviewstatusbar.hint","sourcebytes":[86,101,114,32,66,97,114,114,97,32,100,101,32,69,115,116,97,100,111],"value":"Ver Barra de Estado"},
27 | {"hash":227451986,"name":"tfrmprincipal.acmaceditor.caption","sourcebytes":[38,77,97,99,114,111,32,101,100,105,116,111,114],"value":"&Macro editor"},
28 | {"hash":68617171,"name":"tfrmprincipal.acmaceditor.hint","sourcebytes":[86,101,114,32,69,100,105,116,111,114,32,100,101,32,77,97,99,114,111,115],"value":"Ver Editor de Macros"},
29 | {"hash":117287362,"name":"tfrmprincipal.actoolremedit.caption","sourcebytes":[82,101,109,111,116,101,32,38,69,100,105,116,111,114],"value":"Remote &Editor"},
30 | {"hash":159929519,"name":"tfrmprincipal.actoolremedit.hint","sourcebytes":[86,101,114,32,69,100,105,116,111,114,32,82,101,109,111,116,111],"value":"Ver Editor Remoto"},
31 | {"hash":164733778,"name":"tfrmprincipal.actoolremexplor.caption","sourcebytes":[82,101,109,111,116,101,32,69,38,120,112,108,111,114,101,114],"value":"Remote E&xplorer"},
32 | {"hash":121715487,"name":"tfrmprincipal.actoolremexplor.hint","sourcebytes":[86,101,114,32,69,120,112,108,111,114,97,100,111,114,32,82,101,109,111,116,111],"value":"Ver Explorador Remoto"},
33 | {"hash":213577587,"name":"tfrmprincipal.actoolsett.caption","sourcebytes":[38,83,101,116,116,105,110,103,115],"value":"&Settings"},
34 | {"hash":217738946,"name":"tfrmprincipal.actoolsett.hint","sourcebytes":[67,111,110,102,105,103,117,114,97,114],"value":"Configurar"},
35 | {"hash":232315951,"name":"tfrmprincipal.acmacrecord.caption","sourcebytes":[38,82,101,99,111,114,100,32,77,97,99,114,111],"value":"&Record Macro"},
36 | {"hash":2812976,"name":"tfrmprincipal.achlphelp.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"},
37 | {"hash":158096254,"name":"tfrmprincipal.achlpabout.caption","sourcebytes":[38,65,98,111,117,116,46,46,46],"value":"&About..."}
38 | ]}
39 |
--------------------------------------------------------------------------------
/languages/bash.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
19 |
20 | $EDIT
21 | $EXPLORER
22 |
23 |
24 | %EDIT
25 | %EXPLORER
26 | %CLEAR
27 | %CONNECT
28 | %CONNECTSSH
29 | %DISCONNECT
30 | %SENDLN
31 | %WAIT
32 | %PAUSE
33 | %STOP
34 | %DETECT_PROMPT
35 |
36 |
37 | alias ar asa awk
38 | "awk '{}'"
39 | "awk -F. '{print $1}'"
40 | banner basename bash bc bdiff break bunzip2 bzip2
41 | "case"
42 | "case $x in
43 | 1)
echo ""uno""
44 | ;;
45 | 2)
echo ""dos""
46 | ;;
47 | *)
echo ""otro""
48 | ;;
49 | esac"
50 | "cat " "cd " "cd .." "chgrp "
51 | "chmod " "chmod 755" "chmod 777"
52 | "chown"
53 | "chown usuario directorio/archivo"
54 | "continue"
55 | "cp "
56 | "cp origen destino"
57 | "crontab "
58 | "crontab -l"
59 | "crontab -l | grep "
60 | "date"
61 | "date +%Y%m%d %H%M%S"
62 | "df"
63 | "df -k"
64 | "df -k | grep "
65 | "do"
66 | "done"
67 | "du"
68 | "du -k"
69 | "echo"
70 | "echo ""\_"""
71 | "elif "
72 | "else"
73 | "esac"
74 | "exit"
75 | "expr"
76 | "fcopy"
77 | "fi"
78 | "find"
79 | "find / -name somefile.txt"
80 | "find . -size 5k"
81 | "for "
82 | "for variable in $lista
do
done"
83 | "format"
84 | "ftp "
85 | "grep "
86 | "head "
87 | "id "
88 | "if "
89 | "if [ expresíon ]; then
fi"
90 | "if [ expresíon ]; then
else
fi"
91 | "in"
92 | "join "
93 | "kill"
94 | "kill -9 "
95 | "ln"
96 | "ls"
97 | "ls -l"
98 | "mail"
99 | "man"
100 | "mkdir"
101 | "mv "
102 | "mv origen destino"
103 | "nawk "
104 | "nawk -F. ""{print $1}"""
105 | "ping"
106 | "passwd"
107 | "passwd usuario"
108 | "pwd"
109 | "ps "
110 | "ps -fu"
111 | "rm "
112 | "rmdir "
113 | "sleep "
114 | "sort"
115 | "tail "
116 | "tar"
117 | "telnet"
118 | "then"
119 | "top "
120 | "tty "
121 | "uname"
122 | "uniq"
123 | "until"
124 | "useradd"
125 | "useradd usuario"
126 | "vi "
127 | "vmstat "
128 | "wc "
129 | "wc -l "
130 | "while "
131 | "while [ exprsion ]; do
done"
132 | "who "
133 | "write "
134 |
135 |
136 |
137 |
138 | alias ar asa
139 | banner basename bash bc bdiff break bunzip2 bzip2
140 | cal calendar caller case cat cc cd chmod cksum clear cmp col comm command compress continue cp cpio crontab crypt csplit ctags cut
141 | date dc dd declare deroff dev df diff diff3 dircmp dirname do done du
142 | echo ed egrep elif else env esac eval ex exec exit expand export expr
143 | false fc fgrep fi file find fmt fold for function functions
144 | getconf getopt getopts grep gres
145 | halt hash head help history hostname
146 | iconv id if in integer
147 | jobs join kill local logout
148 | lc let line ln logname look ls
149 | m4 mail mailx make man mkdir more mt mv
150 | newgrp nl nm nohup ntps od
151 | pack paste patch pathchk pax pcat perl pg pr print printf ps pwd
152 | read readonly reboot red return rev rm rmdir
153 | sed select seq set sh shift size sleep sort spell split start strings strip stty sum suspend sync
154 | tail tar tee test then time times touch tr trap true tsort tty type typeset
155 | ulimit umask unalias uname uncompress unexpand uniq unpack unset until uudecode uuencode
156 | vdir vi vim
157 | wait wc whatis whence whereis which while who whoami
158 | xargs zcat
159 |
160 |
161 | awk nawk
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
--------------------------------------------------------------------------------
/_source/FrameCfgSynEdit.lfm:
--------------------------------------------------------------------------------
1 | object fraCfgSynEdit: TfraCfgSynEdit
2 | Left = 0
3 | Height = 404
4 | Top = 0
5 | Width = 468
6 | ClientHeight = 404
7 | ClientWidth = 468
8 | DesignTimePPI = 120
9 | ParentFont = False
10 | TabOrder = 0
11 | DesignLeft = 234
12 | DesignTop = 426
13 | object cbutLinAct: TColorButton
14 | Left = 344
15 | Height = 31
16 | Top = 120
17 | Width = 80
18 | BorderWidth = 2
19 | ButtonColorSize = 16
20 | ButtonColor = clBlack
21 | ParentFont = False
22 | end
23 | object Label1: TLabel
24 | Left = 280
25 | Height = 20
26 | Top = 125
27 | Width = 39
28 | Caption = 'Color:'
29 | ParentColor = False
30 | ParentFont = False
31 | end
32 | object Label8: TLabel
33 | Left = 10
34 | Height = 20
35 | Top = 50
36 | Width = 74
37 | Caption = 'Back Color:'
38 | ParentColor = False
39 | ParentFont = False
40 | end
41 | object cbutBackCol: TColorButton
42 | Left = 130
43 | Height = 31
44 | Top = 42
45 | Width = 80
46 | BorderWidth = 2
47 | ButtonColorSize = 16
48 | ButtonColor = clBlack
49 | ParentFont = False
50 | end
51 | object Label9: TLabel
52 | Left = 254
53 | Height = 20
54 | Top = 50
55 | Width = 71
56 | Caption = 'Text Color:'
57 | ParentColor = False
58 | ParentFont = False
59 | end
60 | object cbutTextCol: TColorButton
61 | Left = 344
62 | Height = 31
63 | Top = 40
64 | Width = 80
65 | BorderWidth = 2
66 | ButtonColorSize = 16
67 | ButtonColor = clBlack
68 | ParentFont = False
69 | end
70 | object GroupBox1: TGroupBox
71 | Left = 10
72 | Height = 103
73 | Top = 280
74 | Width = 452
75 | Caption = ' '
76 | ClientHeight = 78
77 | ClientWidth = 448
78 | ParentFont = False
79 | TabOrder = 0
80 | object chkVerPanVer: TCheckBox
81 | Left = 20
82 | Height = 24
83 | Top = -22
84 | Width = 65
85 | Caption = 'Gutter'
86 | OnChange = chkVerPanVerChange
87 | ParentFont = False
88 | TabOrder = 0
89 | end
90 | object cbutFonPan: TColorButton
91 | Left = 330
92 | Height = 31
93 | Top = 0
94 | Width = 80
95 | BorderWidth = 2
96 | ButtonColorSize = 16
97 | ButtonColor = clBlack
98 | ParentFont = False
99 | end
100 | object Label2: TLabel
101 | Left = 210
102 | Height = 20
103 | Top = 10
104 | Width = 74
105 | Caption = 'Back Color:'
106 | ParentColor = False
107 | ParentFont = False
108 | end
109 | object Label3: TLabel
110 | Left = 210
111 | Height = 20
112 | Top = 45
113 | Width = 71
114 | Caption = 'Text Color:'
115 | ParentColor = False
116 | ParentFont = False
117 | end
118 | object cbutTxtPan: TColorButton
119 | Left = 330
120 | Height = 31
121 | Top = 35
122 | Width = 80
123 | BorderWidth = 2
124 | ButtonColorSize = 16
125 | ButtonColor = clBlack
126 | ParentFont = False
127 | end
128 | object chkVerNumLin: TCheckBox
129 | Left = 5
130 | Height = 24
131 | Top = 10
132 | Width = 143
133 | Caption = 'Show líne number'
134 | ParentFont = False
135 | TabOrder = 1
136 | end
137 | object chkVerMarPle: TCheckBox
138 | Left = 5
139 | Height = 24
140 | Top = 40
141 | Width = 155
142 | Caption = 'Show folding marks'
143 | ParentFont = False
144 | TabOrder = 2
145 | end
146 | end
147 | object GroupBox2: TGroupBox
148 | Left = 10
149 | Height = 110
150 | Top = 160
151 | Width = 438
152 | Caption = ' '
153 | ClientHeight = 85
154 | ClientWidth = 434
155 | ParentFont = False
156 | TabOrder = 1
157 | object chkHighCurWord: TCheckBox
158 | Left = 20
159 | Height = 24
160 | Top = -22
161 | Width = 174
162 | Caption = 'Highlight current word'
163 | OnChange = chkHighCurWordChange
164 | ParentFont = False
165 | TabOrder = 0
166 | end
167 | object Label10: TLabel
168 | Left = 8
169 | Height = 20
170 | Top = 15
171 | Width = 72
172 | Caption = 'Back color:'
173 | ParentColor = False
174 | ParentFont = False
175 | end
176 | object cbutResPalCFon: TColorButton
177 | Left = 120
178 | Height = 31
179 | Top = 8
180 | Width = 80
181 | BorderWidth = 2
182 | ButtonColorSize = 16
183 | ButtonColor = clBlack
184 | ParentFont = False
185 | end
186 | object Label11: TLabel
187 | Left = 230
188 | Height = 20
189 | Top = 15
190 | Width = 69
191 | Caption = 'Text color:'
192 | ParentColor = False
193 | ParentFont = False
194 | end
195 | object cbutResPalCTxt: TColorButton
196 | Left = 330
197 | Height = 31
198 | Top = 8
199 | Width = 80
200 | BorderWidth = 2
201 | ButtonColorSize = 16
202 | ButtonColor = clBlack
203 | ParentFont = False
204 | end
205 | object Label12: TLabel
206 | Left = 8
207 | Height = 20
208 | Top = 55
209 | Width = 82
210 | Caption = 'Frame color:'
211 | ParentColor = False
212 | ParentFont = False
213 | end
214 | object cbutResPalCBor: TColorButton
215 | Left = 120
216 | Height = 31
217 | Top = 48
218 | Width = 80
219 | BorderWidth = 2
220 | ButtonColorSize = 16
221 | ButtonColor = clBlack
222 | ParentFont = False
223 | end
224 | object chkFullWord: TCheckBox
225 | Left = 230
226 | Height = 24
227 | Top = 50
228 | Width = 88
229 | Caption = 'Full Word'
230 | ParentFont = False
231 | TabOrder = 1
232 | end
233 | end
234 | object chkHighCurLin: TCheckBox
235 | Left = 10
236 | Height = 24
237 | Top = 125
238 | Width = 167
239 | Caption = 'Highlight current line:'
240 | OnChange = chkHighCurLinChange
241 | ParentFont = False
242 | TabOrder = 2
243 | end
244 | object chkVerBarDesV: TCheckBox
245 | Left = 10
246 | Height = 24
247 | Top = 88
248 | Width = 137
249 | Caption = '&Vertical Scrollbar'
250 | TabOrder = 3
251 | end
252 | object chkVerBarDesH: TCheckBox
253 | Left = 264
254 | Height = 24
255 | Top = 88
256 | Width = 157
257 | Caption = '&Horizontal Scrollbar'
258 | TabOrder = 4
259 | end
260 | object Label6: TLabel
261 | Left = 10
262 | Height = 20
263 | Top = 17
264 | Width = 73
265 | Caption = 'Font name:'
266 | ParentColor = False
267 | end
268 | object cmbTipoLetra: TComboBox
269 | Left = 106
270 | Height = 28
271 | Top = 10
272 | Width = 100
273 | ItemHeight = 20
274 | TabOrder = 5
275 | Text = 'cmbTipoLetra'
276 | end
277 | object Label7: TLabel
278 | Left = 256
279 | Height = 20
280 | Top = 17
281 | Width = 63
282 | Caption = 'Font Size:'
283 | ParentColor = False
284 | end
285 | object spTam: TSpinEdit
286 | Left = 371
287 | Height = 28
288 | Top = 10
289 | Width = 50
290 | MaxValue = 20
291 | MinValue = 5
292 | TabOrder = 6
293 | Value = 5
294 | end
295 | end
296 |
--------------------------------------------------------------------------------
/_libraries/MiConfig-0.4.2/MiConfigUtils.pas:
--------------------------------------------------------------------------------
1 | {
2 | MiConfigUtils
3 | ===========
4 | Por Tito Hinostroza 20/12/2016
5 |
6 | Descripción
7 | ===========
8 | Unidad con rutinas útiles para implementar las ventanas de configuración.
9 | }
10 | unit MiConfigUtils;
11 | {$mode objfpc}{$H+}
12 | interface
13 | uses
14 | Classes, SysUtils, Graphics, Forms, ComCtrls;
15 |
16 | type
17 | TlistFrames = array of TFrame;
18 |
19 | //Utilidades para el uso de Frames con "MiCOnfig"
20 | procedure HideAllFrames(form: TForm);
21 | procedure ShowFramePos(frm: TFrame; x, y: integer);
22 | //Utilidades para el uso de TTreeView con Frames con "MiCOnfig"
23 | function IdFromTTreeNode(node: TTreeNode): string;
24 | function TTreeNodeFromId(Id: string; tree: TTreeView): TTreeNode;
25 | function AddNodeToTreeView(tree: TTreeView; id, Caption: string): TTreeNode;
26 | function LinkFrameToTreeView(tree: TTreeView; id, Caption: string;
27 | frame: TFrame = nil): TTreeNode;
28 | function ShowFrameOfNode(form: Tform; node: TTreeNode; x, y: integer): boolean;
29 |
30 | implementation
31 |
32 | function ListOfFrames(form: TForm): TlistFrames;
33 | //Devuelve la lista de frames del tipo TCfgFrame declarado aquí
34 | var
35 | i: Integer;
36 | n : integer;
37 | f: TFrame;
38 | begin
39 | SetLength(Result,0);
40 | for i:= 0 to form.ComponentCount-1 do begin
41 | if form.Components[i] is TFrame then begin
42 | f:=TFrame(form.Components[i]); //obtiene referencia
43 | n := high(Result)+1; //número de elementos
44 | setlength(Result, n+1); //hace espacio
45 | Result[n] := f; //agrega
46 | end;
47 | end;
48 | end;
49 | procedure HideAllFrames(form: TForm);
50 | //Oculta todos los frames de un formulario
51 | var
52 | f: TFrame;
53 | begin
54 | for f in ListOfFrames(form) do
55 | f.visible := false;
56 | end;
57 | procedure ShowFramePos(frm: TFrame; x, y: integer);
58 | //Muestra el frame en la posición indicada
59 | begin
60 | frm.left:= x;
61 | frm.Top := y;
62 | frm.Visible:=true;
63 | end;
64 | function IdFromTTreeNode(node: TTreeNode): string;
65 | //Returns an ID with indication of the position of a TTreeNode'.
66 | //It has the form: 1, 1.1, 2.1.3. Only works for 3 levels.
67 | var
68 | nivel: Integer;
69 | begin
70 | nivel := node.Level;
71 | case nivel of
72 | 0: Result := IntToStr(node.Index+1); //de un nivel
73 | 1: Result := IntToStr(node.Parent.Index+1) + '.' +
74 | IntToStr(node.Index+1);
75 | 2: Result := IntToStr(node.Parent.Parent.Index+1) + '.' +
76 | IntToStr(node.Parent.Index+1) + '.' +
77 | IntToStr(node.Index+1)
78 | else //de un nivel
79 | Result := '';
80 | end;
81 | end;
82 | function TTreeNodeFromId(Id: string; tree: TTreeView): TTreeNode;
83 | //Returns a TreeNode, given the ID position. If not found, returns NIL.
84 | //Only works for 3 levels.
85 | var
86 | node: TTreeNode;
87 | begin
88 | for node in tree.Items do begin
89 | if IdFromTTreeNode(node) = Id then exit(node);
90 | end;
91 | exit(nil);
92 | end;
93 | function AddNodeToTreeView(tree: TTreeView; id, Caption: string): TTreeNode;
94 | {Agrega un Frame a TTreeNode, de forma simbólica. Lo que se agrega en realidad,
95 | es un nodo, con el nombre indicado.
96 | El campo ID, determina la ubicación del nodo en el árbol, y es de la forma:
97 | .. ... }
98 | function ChildCount(tv: TTreeView; nod: TTreeNode): integer;
99 | {Devuelve la cantidad de nodos hijos (solo en el primer nivel) de un nodo.}
100 | var
101 | node: TTreeNode;
102 | levChild: Integer;
103 | begin
104 | Result := 0;
105 | if nod = nil then levChild := 0 else levChild := nod.Level+1;
106 | for node in tv.Items do begin
107 | if (node.Level = levChild) and (node.Parent = nod) then inc(Result);
108 | end;
109 | end;
110 | function ChildByNumber(tv: TTreeView; nod: TTreeNode; num: integer): TTreeNode;
111 | {Devuelve el nodo hijo número "n" (empieza en 1) de Nod. Debe asegurarse que hay
112 | al menos "n" nodos hijos en el nodo indicado. De otra forma, se puede generar error.}
113 | var
114 | node: TTreeNode;
115 | levChild, nChild: Integer;
116 | begin
117 | nChild := 0;
118 | if nod = nil then levChild := 0 else levChild := nod.Level+1;
119 | for node in tv.Items do begin
120 | if (node.Level = levChild) and (node.Parent = nod) then begin
121 | inc(nChild);
122 | if nChild=num then exit(node);
123 | end;
124 | end;
125 | //No se encontró
126 | exit(nil);
127 | end;
128 | function BuscarNodoN(tv: TTreeView; raiz: TTreeNode; nNod: string): TTreeNode;
129 | {Busca el nodo de orden "nNod". Asegura que el nodo raiz tenga los nodos, indicados. Si no los tiene, los
130 | crea.}
131 | var
132 | n: LongInt;
133 | begin
134 | n := StrToInt(nNod);
135 | if n<=ChildCount(tv, raiz) then begin
136 | //No hay problema, el nodo ya existe
137 | Result := ChildByNumber(tv, raiz, n);
138 | exit;
139 | end else begin
140 | //No hay nodos hijo suficientes, hay que agregar nodos.
141 | while ChildCount(tv, raiz)nil then //para hacer al nodo visible
168 | nod.Parent.Expanded:=true;
169 | Result := nod;
170 | end;
171 |
172 | function LinkFrameToTreeView(tree: TTreeView; id, Caption: string;
173 | frame: TFrame = nil): TTreeNode;
174 | {Crea un nodo en el TreeView y lo asocias a un Frame de configuración (Ver documentación
175 | de MiConfig). Debe llamarse, después de crear el Frame.
176 | El "id", debe ser único y es de la forma: "1", "2.1" o "3.2.1".
177 | Si se indica el Frame en NIL, no se crea configura el Frame,solo se agrega el ítem}
178 | begin
179 | Result := AddNodeToTreeView(tree, id, Caption); //Crea el ítem el el TreeView
180 | if frame<>nil then begin
181 | //Agrega el ID en la etiqueta, para indicar que está asociado a ese nodo
182 | frame.Hint := frame.Hint + id + '|';
183 | end;
184 | end;
185 | function ShowFrameOfNode(form: Tform; node: TTreeNode; x, y: integer): boolean;
186 | {Muestra el frame correspondiente a un nodo. La correspondencia Frame-nodo, debe
187 | haberse indicado con LinkFrameToTreeView().
188 | Si no encuentra el frame para mostrar, devuelve FALSE.}
189 | var
190 | id: String;
191 | f: TFrame;
192 | begin
193 | HideAllFrames(form);
194 | id := IdFromTTreeNode(node);
195 | //Ubica al Frame
196 | for f in ListOfFrames(form) do begin
197 | if pos(id+'|', f.Hint)<>0 then begin
198 | ShowFramePos(f, x, y); //muestra
199 | exit(true);
200 | end;
201 | end;
202 | //No encontró
203 | exit(false)
204 | end;
205 |
206 | end.
207 |
208 |
--------------------------------------------------------------------------------
/_source/FormConfig.lfm:
--------------------------------------------------------------------------------
1 | object Config: TConfig
2 | Left = 357
3 | Height = 448
4 | Top = 181
5 | Width = 605
6 | BorderStyle = bsDialog
7 | Caption = 'Settings'
8 | ClientHeight = 448
9 | ClientWidth = 605
10 | DesignTimePPI = 120
11 | OnCreate = FormCreate
12 | OnDestroy = FormDestroy
13 | OnShow = FormShow
14 | LCLVersion = '2.0.10.0'
15 | object TreeView1: TTreeView
16 | Left = 0
17 | Height = 385
18 | Top = 0
19 | Width = 170
20 | Align = alLeft
21 | Font.CharSet = ANSI_CHARSET
22 | Font.Height = -17
23 | Font.Name = 'Calibri'
24 | Font.Pitch = fpVariable
25 | Font.Quality = fqDraft
26 | ParentFont = False
27 | ReadOnly = True
28 | TabOrder = 0
29 | OnClick = TreeView1Click
30 | Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
31 | Items.Data = {
32 | F9FFFFFF020004000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020000000000
33 | 0000010700000047656E6572616CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
34 | 000000000000000700000047656E6572616CFFFFFFFFFFFFFFFFFFFFFFFFFFFF
35 | FFFF0000000000000000000B00000050617468732F46696C6573FFFFFFFFFFFF
36 | FFFFFFFFFFFFFFFFFFFF020000000000000001060000004D6163726F73FFFFFF
37 | FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000800000053657474696E
38 | 6773FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000600000045
39 | 6469746F72FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0100000000000000010D00
40 | 000052656D6F746520456469746F72FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
41 | 000000000000000006000000456469746F72FFFFFFFFFFFFFFFFFFFFFFFFFFFF
42 | FFFF0000000000000000000F00000052656D6F7465204578706C6F726572
43 | }
44 | end
45 | object Panel1: TPanel
46 | Left = 0
47 | Height = 63
48 | Top = 385
49 | Width = 605
50 | Align = alBottom
51 | ClientHeight = 63
52 | ClientWidth = 605
53 | TabOrder = 1
54 | object bitAceptar: TBitBtn
55 | Left = 210
56 | Height = 38
57 | Top = 12
58 | Width = 94
59 | Default = True
60 | DefaultCaption = True
61 | Kind = bkOK
62 | OnClick = bitAceptarClick
63 | ParentFont = False
64 | TabOrder = 0
65 | end
66 | object bitAplicar: TBitBtn
67 | Left = 330
68 | Height = 38
69 | Top = 12
70 | Width = 100
71 | Caption = 'A&plicar'
72 | Kind = bkYes
73 | OnClick = bitAplicarClick
74 | ParentFont = False
75 | TabOrder = 1
76 | end
77 | object bitCancel: TBitBtn
78 | Left = 460
79 | Height = 38
80 | Top = 12
81 | Width = 94
82 | Cancel = True
83 | DefaultCaption = True
84 | Kind = bkCancel
85 | ModalResult = 2
86 | OnClick = bitCancelClick
87 | ParentFont = False
88 | TabOrder = 2
89 | end
90 | end
91 | object PageControl1: TPageControl
92 | Left = 170
93 | Height = 385
94 | Top = 0
95 | Width = 435
96 | ActivePage = TabRemExpl
97 | Align = alClient
98 | TabIndex = 5
99 | TabOrder = 2
100 | object TabGeneral: TTabSheet
101 | Caption = 'TabGeneral'
102 | ClientHeight = 352
103 | ClientWidth = 427
104 | object chkOpenLast: TCheckBox
105 | Left = 16
106 | Height = 24
107 | Top = 24
108 | Width = 213
109 | Caption = '&Open last edited file on start'
110 | TabOrder = 0
111 | end
112 | end
113 | object TabFilePath: TTabSheet
114 | Caption = 'TabFilePath'
115 | ClientHeight = 352
116 | ClientWidth = 427
117 | object lblRutScript: TLabel
118 | Left = 24
119 | Height = 20
120 | Top = 24
121 | Width = 101
122 | Caption = '&Temporal path:'
123 | ParentColor = False
124 | end
125 | object DirectoryEdit1: TDirectoryEdit
126 | Left = 24
127 | Height = 28
128 | Top = 48
129 | Width = 336
130 | ShowHidden = False
131 | ButtonWidth = 23
132 | NumGlyphs = 1
133 | MaxLength = 0
134 | TabOrder = 0
135 | end
136 | object lblRutMac: TLabel
137 | Left = 24
138 | Height = 20
139 | Top = 80
140 | Width = 85
141 | Caption = '&Macros path:'
142 | ParentColor = False
143 | end
144 | object DirectoryEdit2: TDirectoryEdit
145 | Left = 24
146 | Height = 28
147 | Top = 104
148 | Width = 336
149 | ShowHidden = False
150 | ButtonWidth = 23
151 | NumGlyphs = 1
152 | MaxLength = 0
153 | TabOrder = 1
154 | end
155 | object lblRutLeng: TLabel
156 | Left = 24
157 | Height = 20
158 | Top = 136
159 | Width = 103
160 | Caption = '&Lenguajes path:'
161 | Enabled = False
162 | ParentColor = False
163 | end
164 | object DirectoryEdit3: TDirectoryEdit
165 | Left = 24
166 | Height = 28
167 | Top = 160
168 | Width = 336
169 | ShowHidden = False
170 | ButtonWidth = 23
171 | NumGlyphs = 1
172 | Enabled = False
173 | MaxLength = 0
174 | TabOrder = 2
175 | end
176 | end
177 | object TabMacSett: TTabSheet
178 | Caption = 'TabMacSett'
179 | ClientHeight = 294
180 | ClientWidth = 403
181 | object edTpoMax: TEdit
182 | Left = 216
183 | Height = 28
184 | Top = 72
185 | Width = 56
186 | Alignment = taRightJustify
187 | TabOrder = 0
188 | Text = 'edTpoMax'
189 | end
190 | object Label1: TLabel
191 | Left = 32
192 | Height = 20
193 | Top = 76
194 | Width = 125
195 | Caption = 'Timeout. (seconds)'
196 | ParentColor = False
197 | end
198 | object chkMarLin: TCheckBox
199 | Left = 32
200 | Height = 24
201 | Top = 32
202 | Width = 215
203 | Caption = 'Highlight line that is running.'
204 | Enabled = False
205 | TabOrder = 1
206 | end
207 | end
208 | object TabMacEdit: TTabSheet
209 | Caption = 'TabMacEdit'
210 | end
211 | object TabRemEdEdit: TTabSheet
212 | Caption = 'TabRemEdEdit'
213 | end
214 | object TabRemExpl: TTabSheet
215 | Caption = 'TabRemExpl'
216 | ClientHeight = 352
217 | ClientWidth = 427
218 | object edTpoMax1: TEdit
219 | Left = 256
220 | Height = 28
221 | Top = 32
222 | Width = 56
223 | Alignment = taRightJustify
224 | TabOrder = 0
225 | Text = 'edTpoMax1'
226 | end
227 | object Label2: TLabel
228 | Left = 32
229 | Height = 40
230 | Top = 24
231 | Width = 160
232 | AutoSize = False
233 | Caption = 'Time for waiting terminal (seconds):'
234 | ParentColor = False
235 | WordWrap = True
236 | end
237 | object chkListDet: TCheckBox
238 | Left = 32
239 | Height = 24
240 | Top = 120
241 | Width = 194
242 | Caption = 'Show detailed list of files.'
243 | TabOrder = 1
244 | end
245 | object chkMosOcul: TCheckBox
246 | Left = 32
247 | Height = 24
248 | Top = 152
249 | Width = 141
250 | Caption = 'Show hidden files'
251 | TabOrder = 2
252 | end
253 | object chkRefDesp: TCheckBox
254 | Left = 32
255 | Height = 24
256 | Top = 184
257 | Width = 230
258 | Caption = 'Refresh list, after any operation'
259 | TabOrder = 3
260 | end
261 | object chkMosRut: TCheckBox
262 | Left = 32
263 | Height = 24
264 | Top = 88
265 | Width = 152
266 | Caption = 'Show currente path'
267 | TabOrder = 4
268 | end
269 | end
270 | end
271 | end
272 |
--------------------------------------------------------------------------------
/_source/TTerm.lpi:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
--------------------------------------------------------------------------------
/_source/FrameCfgSynEdit.pas:
--------------------------------------------------------------------------------
1 | {Unidad con frame para almacenar y configurar las propiedades de un editor
2 | SynEdit. Las propiedades que se manejan son con respecto al coloreado.
3 | El frame definido, está pensado para usarse en una ventana de configuración.
4 | También incluye una lista para almacenamiento de los archivos recientes
5 | Por Tito Hinostroza 23/11/2013
6 | }
7 | unit FrameCfgSynEdit;
8 | {$mode objfpc}{$H+}
9 | interface
10 | uses
11 | Classes, SysUtils, Forms, StdCtrls, Dialogs, SynEdit, Graphics, Spin, LCLType,
12 | Globales, MiConfigXML, MiConfigBasic, SynEditMarkupHighAll, SynEditMarkup,
13 | SynPluginSyncroEdit, SynPluginMultiCaret;
14 | type
15 |
16 | { TfraCfgSynEdit }
17 | TfraCfgSynEdit = class(TFrame)
18 | cbutFonPan: TColorButton;
19 | cbutResPalCFon: TColorButton;
20 | cbutResPalCTxt: TColorButton;
21 | cbutResPalCBor: TColorButton;
22 | cbutTxtPan: TColorButton;
23 | chkFullWord: TCheckBox;
24 | chkHighCurWord: TCheckBox;
25 | chkVerBarDesH: TCheckBox;
26 | chkVerBarDesV: TCheckBox;
27 | chkVerPanVer: TCheckBox;
28 | chkHighCurLin: TCheckBox;
29 | cbutLinAct: TColorButton;
30 | chkVerNumLin: TCheckBox;
31 | chkVerMarPle: TCheckBox;
32 | cbutBackCol: TColorButton;
33 | cbutTextCol: TColorButton;
34 | cmbTipoLetra: TComboBox;
35 | GroupBox1: TGroupBox;
36 | GroupBox2: TGroupBox;
37 | Label1: TLabel;
38 | Label10: TLabel;
39 | Label11: TLabel;
40 | Label12: TLabel;
41 | Label2: TLabel;
42 | Label3: TLabel;
43 | Label6: TLabel;
44 | Label7: TLabel;
45 | Label8: TLabel;
46 | Label9: TLabel;
47 | spTam: TSpinEdit;
48 | procedure chkHighCurLinChange(Sender: TObject);
49 | procedure chkHighCurWordChange(Sender: TObject);
50 | procedure chkVerPanVerChange(Sender: TObject);
51 | public
52 | //Configuración del editor
53 | TipLet : string; //Tipo de letra
54 | TamLet : integer; //Tamaño de letra
55 | showVertSB : boolean; //Mostrar barra de desplazamiento vertical.
56 | showHoriSB : boolean; //Mostrar barra de desplazamiento horizontal.
57 | MarLinAct : boolean; //marcar línea actual
58 | Autoindent : boolean; //Autotabulación
59 | ResPalAct : boolean; //Resaltar palabra actual
60 | ResPalCFon : TColor; //Color de fondo de la palabra actual
61 | ResPalCTxt : TColor; //Color de texto de la palabra actual
62 | ResPalCBor : TColor; //Color de borde de la palabra actual
63 | ResPalFWord: Boolean; //Activa "palabra completa"
64 |
65 | cTxtNor : TColor; //color de texto normal
66 | cFonEdi : TColor; //Color de fondo del control de edición
67 | cFonSel : TColor; //color del fondo de la selección
68 | cTxtSel : TColor; //color del texto de la selección
69 | cLinAct : TColor; //color de la línea actual
70 | //Panel vertical
71 | VerPanVer : boolean; //ver pánel vertical
72 | VerNumLin : boolean; //ver número de línea
73 | VerMarPle : boolean; //ver marcas de plegado
74 | cFonPan : TColor; //color de fondo del panel vertical
75 | cTxtPan : TColor; //color de texto del panel vertical
76 | ArcRecientes: TStringList; //Lista de archivos recientes
77 |
78 | procedure PropToWindow;
79 | procedure Iniciar(section: string; cfgFile: TMiConfigXML; colFonDef: TColor =
80 | clWhite); //Inicia el frame
81 | procedure ConfigEditor(ed: TSynEdit);
82 | public
83 | //Genera constructor y destructor
84 | constructor Create(AOwner: TComponent) ; override;
85 | destructor Destroy; override;
86 | end;
87 |
88 | implementation
89 | {$R *.lfm}
90 | //const
91 | // MAX_ARC_REC = 5; //si se cambia, actualizar ActualMenusReciente()
92 |
93 | procedure TfraCfgSynEdit.Iniciar(section: string; cfgFile: TMiConfigXML;
94 | colFonDef: TColor = clWhite);
95 | var
96 | s: TParElem;
97 | begin
98 | //Asigna referencia necesarias
99 | //Crea las relaciones variable-control
100 |
101 | s:=cfgFile.Asoc_Str(section+ '/TipLet' , @TipLet, cmbTipoLetra, 'Courier New');
102 | s:=cfgFile.Asoc_Int(section+ '/TamLet' , @TamLet, spTam, 10);
103 |
104 | s:=cfgFile.Asoc_Bol(section+ '/showVertSB', @showVertSB, chkVerBarDesV, true);
105 | s:=cfgFile.Asoc_Bol(section+ '/showHoriSB', @showHoriSB, chkVerBarDesH, true);
106 |
107 | s:=cfgFile.Asoc_TCol(section+ '/cTxtNor', @cTxtNor, cbutTextCol, clBlack);
108 | s.categ := 1; //marca como propiedad de tipo "Tema"
109 | s:=cfgFile.Asoc_TCol(section+ '/cFonEdi', @cFonEdi, cbutBackCol, colFonDef);
110 | s.categ := 1; //marca como propiedad de tipo "Tema"
111 | s:=cfgFile.Asoc_TCol(section+ '/cLinAct', @cLinAct, cbutLinAct, clYellow);
112 | s.categ := 1; //marca como propiedad de tipo "Tema"
113 |
114 | s:=cfgFile.Asoc_Bol(section+ '/MarLinAct' , @MarLinAct , chkHighCurLin , false);
115 |
116 | s:=cfgFile.Asoc_Bol(section+ '/ResPalCur' , @ResPalAct , chkHighCurWord , true);
117 | s.categ := 1;
118 | s:=cfgFile.Asoc_TCol(section+ '/ResPalCFon',@ResPalCFon, cbutResPalCFon, clSkyBlue);
119 | s.categ := 1;
120 | s:=cfgFile.Asoc_TCol(section+ '/ResPalCTxt',@ResPalCTxt, cbutResPalCTxt, clBlack);
121 | s.categ := 1;
122 | s:=cfgFile.Asoc_TCol(section+ '/ResPalCBor',@ResPalCBor, cbutResPalCBor, clSkyBlue);
123 | s.categ := 1;
124 | s:=cfgFile.Asoc_Bol(section+ '/ResPalFWord',@ResPalFWord, chkFullWord, false);
125 |
126 | s:=cfgFile.Asoc_Bol(section+ '/VerPanVer', @VerPanVer, chkVerPanVer, true);
127 | s:=cfgFile.Asoc_Bol(section+ '/VerNumLin', @VerNumLin, chkVerNumLin, false);
128 | s:=cfgFile.Asoc_Bol(section+ '/VerMarPle', @VerMarPle, chkVerMarPle, true);
129 | s:=cfgFile.Asoc_TCol(section+ '/cFonPan' , @cFonPan , cbutFonPan , clWhite);
130 | s.categ := 1; //marca como propiedad de tipo "Tema"
131 | s:=cfgFile.Asoc_TCol(section+ '/cTxtPan' , @cTxtPan , cbutTxtPan , clBlack);
132 | s.categ := 1; //marca como propiedad de tipo "Tema"
133 |
134 | cfgFile.Asoc_StrList(section+ '/recient', @ArcRecientes);
135 | end;
136 |
137 | procedure TfraCfgSynEdit.chkVerPanVerChange(Sender: TObject);
138 | begin
139 | chkVerNumLin.Enabled:=chkVerPanVer.Checked;
140 | chkVerMarPle.Enabled:=chkVerPanVer.Checked;
141 | cbutFonPan.Enabled:=chkVerPanVer.Checked;
142 | cbutTxtPan.Enabled:=chkVerPanVer.Checked;
143 | label2.Enabled:=chkVerPanVer.Checked;
144 | label3.Enabled:=chkVerPanVer.Checked;
145 | end;
146 | procedure TfraCfgSynEdit.chkHighCurLinChange(Sender: TObject);
147 | begin
148 | label1.Enabled:=chkHighCurLin.Checked;
149 | cbutLinAct.Enabled:=chkHighCurLin.Checked;
150 | end;
151 | procedure TfraCfgSynEdit.chkHighCurWordChange(Sender: TObject);
152 | begin
153 | label10.Enabled:=chkHighCurWord.Checked;
154 | cbutResPalCFon.Enabled:=chkHighCurWord.Checked;
155 | end;
156 | procedure TfraCfgSynEdit.PropToWindow;
157 | begin
158 | inherited;
159 | chkHighCurLinChange(self); //para actualizar
160 | chkVerPanVerChange(self); //para actualizar
161 | end;
162 | constructor TfraCfgSynEdit.Create(AOwner: TComponent);
163 | begin
164 | inherited Create(AOwner);
165 | ArcRecientes := TStringList.Create; //crea lista
166 | cmbTipoLetra.Items.Clear;
167 | cmbTipoLetra.Items.Add('Courier New');
168 | cmbTipoLetra.Items.Add('Fixedsys');
169 | cmbTipoLetra.Items.Add('Lucida Console');
170 | cmbTipoLetra.Items.Add('Consolas');
171 | cmbTipoLetra.Items.Add('Cambria');
172 | end;
173 | destructor TfraCfgSynEdit.Destroy;
174 | begin
175 | FreeAndNil(ArcRecientes);
176 | inherited Destroy;
177 | end;
178 | procedure TfraCfgSynEdit.ConfigEditor(ed: TSynEdit);
179 | {Configura el editor con las propiedades almacenadas}
180 | var
181 | marc: TSynEditMarkup;
182 | fSynchro: TSynPluginSyncroEdit;
183 | fMultiCaret: TSynPluginMultiCaret;
184 | begin
185 | if ed = nil then exit; //protección
186 |
187 | //Tipo de texto
188 | if TipLet <> '' then ed.Font.Name:=TipLet;
189 | if (TamLet > 6) and (TamLet < 32) then ed.Font.Size:=Round(TamLet);
190 | //Colores
191 | ed.Font.Color:=cTxtNor; //color de texto normal
192 | ed.Color:=cFonEdi; //color de fondo
193 | //Resaltado de línea actual
194 | if MarLinAct then
195 | ed.LineHighlightColor.Background:=cLinAct
196 | else
197 | ed.LineHighlightColor.Background:=clNone;
198 | //Configura panel vertical
199 | ed.Gutter.Visible:=VerPanVer; //muestra panel vertical
200 | ed.Gutter.Parts[1].Visible:=VerNumLin; //Número de línea
201 | if ed.Gutter.Parts.Count>4 then
202 | ed.Gutter.Parts[4].Visible:=VerMarPle; //marcas de plegado
203 | ed.Gutter.Color:=cFonPan; //color de fondo del panel
204 | ed.Gutter.Parts[1].MarkupInfo.Background:=cFonPan; //fondo del núemro de línea
205 | ed.Gutter.Parts[1].MarkupInfo.Foreground:=cTxtPan; //texto del núemro de línea
206 |
207 | if showVertSB and showHoriSB then //barras de desplazamiento
208 | ed.ScrollBars:= ssBoth
209 | else if showVertSB and not showHoriSB then
210 | ed.ScrollBars:= ssVertical
211 | else if not showVertSB and showHoriSB then
212 | ed.ScrollBars:= ssHorizontal
213 | else
214 | ed.ScrollBars := ssNone;
215 |
216 | ////////Configura el resaltado de la palabra actual //////////
217 | marc := ed.MarkupByClass[TSynEditMarkupHighlightAllCaret];
218 | if marc<>nil then begin //hay marcador
219 | marc.Enabled:=ResPalAct; //configura
220 | marc.MarkupInfo.Background := ResPalCFon;
221 | marc.MarkupInfo.FrameColor := ResPalCBor;
222 | marc.MarkupInfo.Foreground := ResPalCTxt;
223 | TSynEditMarkupHighlightAllCaret(marc).FullWord := ResPalFWord;
224 | end;
225 | ///////fija color de delimitadores () {} [] ///////////
226 | ed.BracketMatchColor.Foreground := clRed;
227 |
228 | //Crea un "plugin" de edición síncrona
229 | fSynchro := TSynPluginSyncroEdit.Create(self);
230 | fSynchro.Editor := ed;
231 |
232 | //Configura múltiples cursores
233 | fMultiCaret := TSynPluginMultiCaret.Create(self);
234 | with fMultiCaret do begin
235 | Editor := ed;
236 | with KeyStrokes do begin
237 | Add.Command := ecPluginMultiCaretSetCaret;
238 | Add.Key := VK_INSERT;
239 | Add.Shift := [ssShift, ssCtrl];
240 | Add.ShiftMask := [ssShift,ssCtrl,ssAlt];
241 | // Add.Command := ecPluginMultiCaretUnsetCaret;
242 | // Add.Key := VK_DELETE;
243 | // Add.Shift := [ssShift, ssCtrl];
244 | // Add.ShiftMask := [ssShift,ssCtrl,ssAlt];
245 | end;
246 | end;
247 |
248 | end;
249 |
250 | end.
251 |
252 |
--------------------------------------------------------------------------------
/_libraries/MiConfig-0.4.2/MiConfigINI.pas:
--------------------------------------------------------------------------------
1 | {
2 | MiConfigIni 0.1b
3 | =============
4 | Por Tito Hinostroza 29/07/2016
5 |
6 | Descripción
7 | ===========
8 | Unidad con rutinas de lectura/escritura de propiedades en archivos INI. Permite crear
9 | fácilmente, una ventana de configuración, con las opciones: ACEPTAR y CANCELAR.
10 | Está basado en la librería ConfigFrame, pero a diferencia de esta, aquí las propiedades
11 | no se separan en "frames", sino que todas las propiedades se manejan en un mismo objeto.
12 | Para alamacenar las propiedades, se debe crear un objeto TMiConfigINI. Sin embargo,
13 | la unidad crea por defecto, una isntancia de TMiConfigINI, llamada "cfgFile", que toma
14 | como nombre .ini
15 | Tiene como dependencia a la librería MisUtils.
16 |
17 | Por Tito Hinostroza 29/07/2016
18 | }
19 | unit MiConfigINI;
20 | {$mode objfpc}{$H+}
21 | interface
22 | uses
23 | Classes, SysUtils, Graphics, Forms, LCLType, IniFiles, MiConfigBasic;
24 | type
25 | { TMiConfigINI }
26 | {Clase base que es usada para manejar los campos de configuración.}
27 | TMiConfigINI = class(TMiConfigBasic)
28 | protected
29 | fileName : string; //archivo XML
30 | function DefaultFileName: string;
31 | procedure FileProperty(iniCfg: TIniFile; const r: TParElem; FileToProp: boolean);
32 | function LoadINIFile(filName: string; out iniCfg: TIniFile): boolean;
33 | public
34 | secINI: string; //sección donde se guardarán los datos en un archivo INI
35 | procedure VerifyFile;
36 | function FileToProperties: boolean; virtual;
37 | function PropertiesToFile: boolean; virtual;
38 | function GetFileName: string;
39 | procedure SetFileName(AValue: string);
40 | public //Constructor y Destructor
41 | constructor Create(INIfile0: string);
42 | destructor Destroy; override;
43 | end;
44 |
45 | var
46 | cfgFile : TMiConfigINI; //Default INI Config file
47 |
48 | implementation
49 | //Funciones de uso interno
50 | function CodeStr(s:string): string;
51 | {Protege a una cadena para que no pierda los espacios laterales si es que los tiene,
52 | porque el el archivo INI se pierden. Además codifica el caracter "=", porque es
53 | reservado en el archvio INI}
54 | begin
55 | Result := '.'+s+'.';
56 | Result := StringReplace(Result, '=', #25, [rfReplaceAll]); //protege caracter
57 | Result := StringReplace(Result, LineEnding, #26, [rfReplaceAll]); //protege caracter
58 | end;
59 | function DecodeStr(s:string): string;
60 | {Quita la protección a una cadena que ha sido guardada en un archivo INI}
61 | begin
62 | Result:=copy(s,2,length(s)-2);
63 | Result := StringReplace(Result, #25, '=', [rfReplaceAll]); //protege caracter
64 | Result := StringReplace(Result, #26, LineEnding, [rfReplaceAll]); //protege caracter
65 | end;
66 | { TMiConfigINI }
67 | function TMiConfigINI.LoadINIFile(filName: string; out iniCfg: TIniFile): boolean;
68 | {Carga el archivo "filName" en iniCfg. Si hay error, actualiza "MsjError" y
69 | devuelve FALSE. Función creada para uso interno de la clase.}
70 | begin
71 | msjErr := '';
72 | Result := true;
73 | if not FileExists(filName) then begin
74 | ctlErr := nil;
75 | MsjErr := 'INI file does not exist.'; //error
76 | exit(false); //para que no intente leer
77 | end;
78 | try
79 | iniCfg := TIniFile.Create(filName);
80 |
81 | except
82 | ctlErr := nil;
83 | MsjErr := Format('Error reading INI file: %s', [filName]);
84 | iniCfg.Free;
85 | exit(false);
86 | end;
87 | end;
88 | function TMiConfigINI.DefaultFileName: string;
89 | {Devuelve el nombre pro defecto del archvio de configuración}
90 | begin
91 | Result := ChangeFileExt(Application.ExeName,'.ini');
92 | end;
93 | procedure TMiConfigINI.VerifyFile;
94 | //Verifica si el archivo INI "FileName" existe. Si no, muestra un mensaje y lo crea.
95 | var
96 | F: textfile;
97 | begin
98 | if not FileExists(fileName) then begin
99 | Application.MessageBox(
100 | Pchar(Format('No INI file found: %s', [fileName])),
101 | '', MB_ICONERROR);
102 | //Crea uno vacío para leer las opciones por defecto
103 | AssignFile(F, fileName);
104 | Rewrite(F);
105 | CloseFile(F);
106 | end;
107 | end;
108 | procedure TMiConfigINI.FileProperty(iniCfg: TIniFile; const r: TParElem; FileToProp: boolean);
109 | {Permite leer o escribir una propiedad en el archivo XML}
110 | var
111 | n, j: Integer;
112 | list: TStringList;
113 | strlst: TStringList;
114 | c: TColor;
115 | begin
116 | if r.varRef = nil then exit; //se inició con NIL
117 | case r.asType of
118 | tp_Int, tp_Int_TEdit, tp_Int_TSpinEdit, tp_Int_TRadioGroup:
119 | if FileToProp then begin //lee entero
120 | r.AsInteger := iniCfg.ReadInteger(secINI, r.asLabel, r.defInt);
121 | end else begin
122 | iniCfg.WriteInteger(secINI, r.asLabel, r.AsInteger);
123 | end;
124 | //---------------------------------------------------------------------
125 | tp_Dbl, tp_Dbl_TEdit, tp_Dbl_TFloatSpinEdit:
126 | if FileToProp then begin
127 | r.AsDouble := iniCfg.ReadFloat(secINI, r.asLabel, r.defDbl);
128 | end else begin
129 | iniCfg.WriteFloat(secINI, r.asLabel, r.AsDouble);
130 | end;
131 | //---------------------------------------------------------------------
132 | tp_Str, tp_Str_TEdit, tp_Str_TEditButton, tp_Str_TCmbBox:
133 | if FileToProp then begin //lee cadena
134 | r.AsString := DecodeStr(iniCfg.ReadString(secINI, r.asLabel, '.'+r.defStr+'.'));
135 | end else begin
136 | iniCfg.WriteString(secINI, r.asLabel, CodeStr(r.AsString));
137 | end;
138 | //---------------------------------------------------------------------
139 | tp_Bol, tp_Bol_TCheckBox, tp_Bol_TRadBut:
140 | if FileToProp then begin //lee booleano
141 | r.AsBoolean := iniCfg.ReadBool(secINI, r.asLabel, r.defBol);
142 | end else begin
143 | iniCfg.WriteBool(secINI, r.asLabel, r.AsBoolean);
144 | end;
145 | //---------------------------------------------------------------------
146 | tp_Enum, tp_Enum_TRadBut, tp_Enum_TRadGroup:
147 | if FileToProp then begin //lee enumerado como entero
148 | if r.varSiz = 4 then begin //tamaño común de las variable enumeradas
149 | r.AsInt32 := iniCfg.ReadInteger(secINI, r.asLabel, r.defInt);
150 | end else begin //tamaño no implementado
151 | msjErr := 'Enumerated type no handled.';
152 | exit;
153 | end;
154 | end else begin
155 | if r.varSiz = 4 then begin
156 | iniCfg.WriteInteger(secINI, r.asLabel, r.AsInt32); //como entero de 4 bytes
157 | end else begin //tamaño no implementado
158 | msjErr := 'Enumerated type no handled.';
159 | exit;
160 | end;
161 | end;
162 | //---------------------------------------------------------------------
163 | tp_TCol_TColBut, tp_TCol_TColBox:
164 | if FileToProp then begin //lee TColor
165 | r.AsTColor := iniCfg.ReadInteger(secINI, r.asLabel, r.defCol);
166 | end else begin
167 | c := r.AsTColor;
168 | iniCfg.WriteInteger(secINI, r.asLabel, c);
169 | end;
170 | tp_StrList, tp_StrList_TListBox:
171 | if FileToProp then begin //lee TStringList
172 | list := TStringList(r.varRef^);
173 | iniCfg.ReadSection(secINI+'_'+r.asLabel, list);
174 | //decodifica cadena
175 | for n:=0 to list.Count-1 do list[n] := DecodeStr(list[n]);
176 | end else begin
177 | strlst := TStringList(r.varRef^);
178 | iniCfg.EraseSection(secINI+'_'+r.asLabel);
179 | for j:= 0 to strlst.Count-1 do begin
180 | iniCfg.WriteString(secINI+'_'+r.asLabel,
181 | CodeStr(strlst[j]),'');
182 | end;
183 | end;
184 | else //no se ha implementado bien
185 | msjErr := 'Design error.';
186 | exit;
187 | end;
188 | end;
189 |
190 | function TMiConfigINI.FileToProperties: boolean;
191 | {Lee de disco las propiedades registradas
192 | Si encuentra error devuelve FALSE, y el mensaje de error en "MsjErr", y el elemento
193 | con error en "ctlErr".}
194 | var
195 | r: TParElem;
196 | iniCfg: TIniFile;
197 | begin
198 | if not LoadINIFile(fileName, iniCfg) then exit(false);
199 | for r in listParElem do begin
200 | FileProperty(iniCfg, r, true);
201 | if msjErr<>'' then begin
202 | ctlErr := r; //elemento que produjo el error
203 | iniCfg.Free; //libera
204 | exit(false); //sale con error
205 | end;
206 | if r.OnFileToProperty<>nil then r.OnFileToProperty;
207 | end;
208 | //Terminó con éxito. Actualiza los cambios
209 | if OnPropertiesChanges<>nil then OnPropertiesChanges;
210 | ctlErr := nil;
211 | iniCfg.Free; //libera
212 | exit(true); //sale sin error
213 | end;
214 | function TMiConfigINI.PropertiesToFile: boolean;
215 | {Guarda en disco las propiedades registradas
216 | Si encuentra error devuelve FALSE, y el mensaje de error en "MsjErr", y el elemento
217 | con error en "ctlErr".}
218 | var
219 | r: TParElem;
220 | iniCfg: TIniFile; //
221 | begin
222 | if FileExists(fileName) then begin //ve si existe
223 | if FileIsReadOnly(fileName) then begin
224 | ctlErr := nil;
225 | MsjErr := 'INI file is only read.';
226 | exit(false);
227 | end;
228 | end;
229 | try
230 | iniCfg := TIniFile.Create(fileName);
231 | except
232 | ctlErr := nil;
233 | MsjErr := Format('Error writing INI file: %s', [fileName]);
234 | exit(false);
235 | end;
236 | msjErr := '';
237 | for r in listParElem do begin
238 | if r.OnPropertyToFile<>nil then r.OnPropertyToFile; //se ejecuta antes
239 | FileProperty(iniCfg, r, false);
240 | if msjErr<>'' then begin
241 | ctlErr := r; //elemento que produjo el error
242 | iniCfg.Free; //libera
243 | exit(false); //sale con error
244 | end;
245 | end;
246 | ctlErr := nil;
247 | iniCfg.Free; //libera
248 | exit(true); //sin error
249 | end;
250 |
251 | function TMiConfigINI.GetFileName: string;
252 | begin
253 | Result := fileName;
254 | end;
255 |
256 | procedure TMiConfigINI.SetFileName(AValue: string);
257 | begin
258 | fileName := AValue;
259 | end;
260 | //Constructor y Destructor
261 | constructor TMiConfigINI.Create(INIfile0: string);
262 | begin
263 | inherited Create;
264 | fileName := INIfile0;
265 | secINI := 'config'; //sección por defecto en archivo INI
266 | end;
267 | destructor TMiConfigINI.Destroy;
268 | begin
269 | inherited Destroy;
270 | end;
271 |
272 | initialization
273 | cfgFile := TMiConfigINI.Create(cfgFile.DefaultFileName);
274 |
275 | finalization
276 | cfgFile.Destroy;
277 | end.
278 |
279 |
--------------------------------------------------------------------------------
/_source/FrameTabSession.lrj:
--------------------------------------------------------------------------------
1 | {"version":1,"strings":[
2 | {"hash":106991073,"name":"tfratabsession.toolbar1.caption","sourcebytes":[84,111,111,108,66,97,114,49],"value":"ToolBar1"},
3 | {"hash":160486419,"name":"tfratabsession.toolbutton3.caption","sourcebytes":[84,111,111,108,66,117,116,116,111,110,51],"value":"ToolButton3"},
4 | {"hash":160486425,"name":"tfratabsession.toolbutton9.caption","sourcebytes":[84,111,111,108,66,117,116,116,111,110,57],"value":"ToolButton9"},
5 | {"hash":151863763,"name":"tfratabsession.toolbutton13.caption","sourcebytes":[84,111,111,108,66,117,116,116,111,110,49,51],"value":"ToolButton13"},
6 | {"hash":151863744,"name":"tfratabsession.toolbutton20.caption","sourcebytes":[84,111,111,108,66,117,116,116,111,110,50,48],"value":"ToolButton20"},
7 | {"hash":151863748,"name":"tfratabsession.toolbutton24.caption","sourcebytes":[84,111,111,108,66,117,116,116,111,110,50,52],"value":"ToolButton24"},
8 | {"hash":192829198,"name":"tfratabsession.acfilnewses.caption","sourcebytes":[38,78,101,119,32,83,101,115,115,105,111,110],"value":"&New Session"},
9 | {"hash":161371918,"name":"tfratabsession.acfilnewses.hint","sourcebytes":[78,101,119,32,83,101,115,115,105,111,110],"value":"New Session"},
10 | {"hash":3317102,"name":"tfratabsession.acfilopeses.caption","sourcebytes":[38,79,112,101,110,32,83,101,115,115,105,111,110,32,46,46,46],"value":"&Open Session ..."},
11 | {"hash":212623374,"name":"tfratabsession.acfilopeses.hint","sourcebytes":[79,112,101,110,32,83,101,115,115,105,111,110],"value":"Open Session"},
12 | {"hash":38951214,"name":"tfratabsession.acfilsavses.caption","sourcebytes":[38,83,97,118,101,32,83,101,115,115,105,111,110],"value":"&Save Session"},
13 | {"hash":366789,"name":"tfratabsession.acfilsavses.hint","sourcebytes":[83,97,118,101],"value":"Save"},
14 | {"hash":152860883,"name":"tfratabsession.acfilsavsesas.caption","sourcebytes":[83,97,118,101,32,83,101,115,115,105,111,110,32,38,65,115],"value":"Save Session &As"},
15 | {"hash":160199891,"name":"tfratabsession.acfilsavsesas.hint","sourcebytes":[83,97,118,101,32,65,115],"value":"Save As"},
16 | {"hash":78913630,"name":"tfratabsession.acfilstarlog.caption","sourcebytes":[38,83,116,97,114,116,32,76,111,103,103,105,110,103,46,46,46],"value":"&Start Logging..."},
17 | {"hash":167070311,"name":"tfratabsession.acfilstarlog.hint","sourcebytes":[83,116,97,114,116,32,76,111,103,103,105,110,103],"value":"Start Logging"},
18 | {"hash":143048295,"name":"tfratabsession.acfilstoplog.caption","sourcebytes":[83,38,116,111,112,32,76,111,103,103,105,110,103],"value":"S&top Logging"},
19 | {"hash":150388247,"name":"tfratabsession.acfilstoplog.hint","sourcebytes":[83,116,111,112,32,76,111,103,103,105,110,103],"value":"Stop Logging"},
20 | {"hash":2868399,"name":"tfratabsession.acedundo.caption","sourcebytes":[38,85,110,100,111],"value":"&Undo"},
21 | {"hash":378031,"name":"tfratabsession.acedundo.hint","sourcebytes":[85,110,100,111],"value":"Undo"},
22 | {"hash":2853807,"name":"tfratabsession.acedredo.caption","sourcebytes":[38,82,101,100,111],"value":"&Redo"},
23 | {"hash":363439,"name":"tfratabsession.acedredo.hint","sourcebytes":[82,101,100,111],"value":"Redo"},
24 | {"hash":286148,"name":"tfratabsession.acedcut.caption","sourcebytes":[67,38,117,116],"value":"C&ut"},
25 | {"hash":19140,"name":"tfratabsession.acedcut.hint","sourcebytes":[67,117,116],"value":"Cut"},
26 | {"hash":2795129,"name":"tfratabsession.acedcopy.caption","sourcebytes":[38,67,111,112,121],"value":"&Copy"},
27 | {"hash":304761,"name":"tfratabsession.acedcopy.hint","sourcebytes":[67,111,112,121],"value":"Copy"},
28 | {"hash":45517477,"name":"tfratabsession.acedpaste.caption","sourcebytes":[38,80,97,115,116,101],"value":"&Paste"},
29 | {"hash":5671589,"name":"tfratabsession.acedpaste.hint","sourcebytes":[80,97,115,116,101],"value":"Paste"},
30 | {"hash":195288076,"name":"tfratabsession.acedselecall.caption","sourcebytes":[83,101,108,101,99,116,32,65,108,108],"value":"Select All"},
31 | {"hash":195288076,"name":"tfratabsession.acedselecall.hint","sourcebytes":[83,101,108,101,99,116,32,65,108,108],"value":"Select All"},
32 | {"hash":103855109,"name":"tfratabsession.acpcmsendlin.caption","sourcebytes":[83,101,110,100,32,38,76,105,110,101],"value":"Send &Line"},
33 | {"hash":43621806,"name":"tfratabsession.acpcmsendlin.hint","sourcebytes":[83,101,110,100,32,99,117,114,114,101,110,116,32,108,105,110,101,32,111,114,32,115,101,108,101,99,116,105,111,110],"value":"Send current line or selection"},
34 | {"hash":73596908,"name":"tfratabsession.acpcmsendall.caption","sourcebytes":[83,101,110,100,32,38,65,108,108],"value":"Send &All"},
35 | {"hash":132283182,"name":"tfratabsession.acpcmsendall.hint","sourcebytes":[83,101,110,100,32,97,108,108,32,116,101,120,116,32,111,114,32,115,101,108,101,99,116,105,111,110],"value":"Send all text or selection"},
36 | {"hash":267503795,"name":"tfratabsession.acpcmsendctrc.caption","sourcebytes":[83,101,110,100,32,67,116,38,114,108,43,67],"value":"Send Ct&rl+C"},
37 | {"hash":82987667,"name":"tfratabsession.acpcmsendctrc.hint","sourcebytes":[83,101,110,100,32,67,116,114,108,43,67],"value":"Send Ctrl+C"},
38 | {"hash":95173330,"name":"tfratabsession.acpcmhide.caption","sourcebytes":[79,99,117,108,116,97,114],"value":"Ocultar"},
39 | {"hash":195585123,"name":"tfratabsession.acpcmhide.hint","sourcebytes":[79,99,117,108,116,97,114,32,80,97,110,101,108,32,100,101,32,99,111,109,97,110,100,111,115],"value":"Ocultar Panel de comandos"},
40 | {"hash":104179838,"name":"tfratabsession.acpcmchgpos.caption","sourcebytes":[67,97,109,98,105,97,114,32,112,111,115,105,99,105,195,179,110],"value":"Cambiar posici\u00F3n"},
41 | {"hash":42166563,"name":"tfratabsession.acpcmchgpos.hint","sourcebytes":[67,97,109,98,105,97,32,108,97,32,112,111,115,105,99,105,195,179,110,32,100,101,108,32,80,97,110,101,108,32,100,101,32,99,111,109,97,110,100,111,115],"value":"Cambia la posici\u00F3n del Panel de comandos"},
42 | {"hash":174409988,"name":"tfratabsession.acterconec.caption","sourcebytes":[38,67,111,110,110,101,99,116],"value":"&Connect"},
43 | {"hash":174410724,"name":"tfratabsession.acterconec.hint","sourcebytes":[67,111,110,110,101,99,116],"value":"Connect"},
44 | {"hash":177208116,"name":"tfratabsession.acterdescon.caption","sourcebytes":[38,68,105,115,99,111,110,110,101,99,116],"value":"&Disconnect"},
45 | {"hash":174193460,"name":"tfratabsession.acterdescon.hint","sourcebytes":[68,105,115,99,111,110,110,101,99,116],"value":"Disconnect"},
46 | {"hash":238646498,"name":"tfratabsession.acterlimbuf.caption","sourcebytes":[38,67,108,101,97,110,32,66,117,102,102,101,114],"value":"&Clean Buffer"},
47 | {"hash":251900978,"name":"tfratabsession.acterlimbuf.hint","sourcebytes":[67,108,101,97,110,32,116,104,101,32,115,99,114,101,101,110,32,98,117,102,102,101,114],"value":"Clean the screen buffer"},
48 | {"hash":131401460,"name":"tfratabsession.acterdetprm.caption","sourcebytes":[68,101,116,101,99,116,32,38,80,114,111,109,112,116],"value":"Detect &Prompt"},
49 | {"hash":229899860,"name":"tfratabsession.acterdetprm.hint","sourcebytes":[68,101,116,101,99,116,32,112,114,111,109,112,116],"value":"Detect prompt"},
50 | {"hash":11264482,"name":"tfratabsession.acterverbher.caption","sourcebytes":[86,105,101,119,32,84,111,111,108,98,97,114],"value":"View Toolbar"},
51 | {"hash":11461090,"name":"tfratabsession.acterverbher.hint","sourcebytes":[86,105,101,119,32,84,111,108,108,98,97,114],"value":"View Tollbar"},
52 | {"hash":10714836,"name":"tfratabsession.acterprmarr.caption","sourcebytes":[71,111,32,116,111,32,38,80,114,101,118,105,111,117,115,32,112,114,111,109,112,116],"value":"Go to &Previous prompt"},
53 | {"hash":201855412,"name":"tfratabsession.acterprmarr.hint","sourcebytes":[71,111,32,116,111,32,112,114,101,118,105,111,117,115,32,112,114,111,109,112,116],"value":"Go to previous prompt"},
54 | {"hash":19853316,"name":"tfratabsession.acterprmaba.caption","sourcebytes":[71,111,32,116,111,32,38,78,101,120,116,32,112,114,111,109,112,116],"value":"Go to &Next prompt"},
55 | {"hash":105094308,"name":"tfratabsession.acterprmaba.hint","sourcebytes":[71,111,32,116,111,32,110,101,120,116,32,112,114,111,109,112,116],"value":"Go to next prompt"},
56 | {"hash":230342035,"name":"tfratabsession.achercfg.caption","sourcebytes":[83,101,38,116,116,105,110,103,115],"value":"Se&ttings"},
57 | {"hash":88896291,"name":"tfratabsession.achercfg.hint","sourcebytes":[83,104,111,119,32,115,101,116,116,105,110,103,115],"value":"Show settings"},
58 | {"hash":232315951,"name":"tfratabsession.achergramac.caption","sourcebytes":[38,82,101,99,111,114,100,32,77,97,99,114,111],"value":"&Record Macro"},
59 | {"hash":64543759,"name":"tfratabsession.achergramac.hint","sourcebytes":[82,101,99,111,114,100,32,77,97,99,114,111],"value":"Record Macro"},
60 | {"hash":194742456,"name":"tfratabsession.acfindfind.caption","sourcebytes":[38,83,101,97,114,99,104],"value":"&Search"},
61 | {"hash":315460,"name":"tfratabsession.acfindfind.hint","sourcebytes":[70,105,110,100],"value":"Find"},
62 | {"hash":73728500,"name":"tfratabsession.acfindnext.caption","sourcebytes":[70,105,110,100,32,78,101,120,116],"value":"Find Next"},
63 | {"hash":73728500,"name":"tfratabsession.acfindnext.hint","sourcebytes":[70,105,110,100,32,78,101,120,116],"value":"Find Next"},
64 | {"hash":56396339,"name":"tfratabsession.acfindprev.caption","sourcebytes":[70,105,110,100,32,80,114,101,118,105,111,115],"value":"Find Previos"},
65 | {"hash":97035251,"name":"tfratabsession.acfindprev.hint","sourcebytes":[70,105,110,100,32,80,114,101,118,105,111,117,115],"value":"Find Previous"},
66 | {"hash":147269573,"name":"tfratabsession.acfindreplace.caption","sourcebytes":[82,101,112,108,97,99,101],"value":"Replace"},
67 | {"hash":147269573,"name":"tfratabsession.acfindreplace.hint","sourcebytes":[82,101,112,108,97,99,101],"value":"Replace"},
68 | {"hash":106975938,"name":"tfratabsession.actersendchar.caption","sourcebytes":[83,101,110,100,32,99,38,104,97,114],"value":"Send c&har"},
69 | {"hash":49520290,"name":"tfratabsession.actersendenter.caption","sourcebytes":[83,101,110,100,32,38,69,110,116,101,114],"value":"Send &Enter"},
70 | {"hash":205926162,"name":"tfratabsession.actersendcr.caption","sourcebytes":[83,101,110,100,32,38,67,82],"value":"Send &CR"},
71 | {"hash":81600358,"name":"tfratabsession.actersendcrlf.caption","sourcebytes":[83,101,110,100,32,67,82,43,38,76,70],"value":"Send CR+&LF"},
72 | {"hash":163865942,"name":"tfratabsession.actersendlf.caption","sourcebytes":[83,101,110,100,32,76,70],"value":"Send LF"},
73 | {"hash":187662580,"name":"tfratabsession.actercoppal.caption","sourcebytes":[67,111,112,121,32,38,87,111,114,100],"value":"Copy &Word"},
74 | {"hash":68035157,"name":"tfratabsession.actercopnom.caption","sourcebytes":[38,67,111,112,121,32,70,105,108,101,32,110,97,109,101],"value":"&Copy File name"},
75 | {"hash":189931704,"name":"tfratabsession.actercoprut.caption","sourcebytes":[67,111,112,121,32,80,97,116,38,104],"value":"Copy Pat&h"},
76 | {"hash":75523480,"name":"tfratabsession.actercopnomrut.caption","sourcebytes":[67,111,112,121,32,78,97,109,101,32,97,110,100,32,80,97,116,104],"value":"Copy Name and Path"},
77 | {"hash":82431811,"name":"tfratabsession.mnpopleng.caption","sourcebytes":[38,76,97,110,103,117,97,103,101,115],"value":"&Languages"},
78 | {"hash":73124687,"name":"tfratabsession.menuitem82.caption","sourcebytes":[67,111,112,105,97,114,32,69,108,101,109,101,110,116,111],"value":"Copiar Elemento"},
79 | {"hash":180735906,"name":"tfratabsession.menuitem72.caption","sourcebytes":[38,69,110,118,105,97,114],"value":"&Enviar"}
80 | ]}
81 |
--------------------------------------------------------------------------------
/_source/FormConfig.pas:
--------------------------------------------------------------------------------
1 | {Unidad con formulario de configuración para manejar las propiedades de
2 | una aplicación. Está pensado para usarse con frames de la clase Tframe,
3 | definida en la unidad "PropertyFrame".
4 | }
5 | unit FormConfig;
6 |
7 | {$mode objfpc}{$H+}
8 |
9 | interface
10 |
11 | uses
12 | SysUtils, Classes, Forms, Graphics, SynEdit, Buttons, ComCtrls, ExtCtrls,
13 | StdCtrls, EditBtn, Controls, MisUtils, FrameCfgSynEdit, Globales, MiConfigXML;
14 |
15 | type
16 | TEvCambiaProp = procedure of object; //evento para indicar que hay cambio
17 |
18 | { TConfig }
19 |
20 | TConfig = class(TForm)
21 | bitAceptar: TBitBtn;
22 | bitAplicar: TBitBtn;
23 | bitCancel: TBitBtn;
24 | chkListDet: TCheckBox;
25 | chkMarLin: TCheckBox;
26 | chkMosOcul: TCheckBox;
27 | chkMosRut: TCheckBox;
28 | chkOpenLast: TCheckBox;
29 | chkRefDesp: TCheckBox;
30 | DirectoryEdit1: TDirectoryEdit;
31 | DirectoryEdit2: TDirectoryEdit;
32 | DirectoryEdit3: TDirectoryEdit;
33 | edTpoMax: TEdit;
34 | edTpoMax1: TEdit;
35 | Label1: TLabel;
36 | Label2: TLabel;
37 | lblRutLeng: TLabel;
38 | lblRutMac: TLabel;
39 | lblRutScript: TLabel;
40 | PageControl1: TPageControl;
41 | Panel1: TPanel;
42 | TabGeneral: TTabSheet;
43 | TabFilePath: TTabSheet;
44 | TabMacSett: TTabSheet;
45 | TabMacEdit: TTabSheet;
46 | TabRemEdEdit: TTabSheet;
47 | TabRemExpl: TTabSheet;
48 | TreeView1: TTreeView;
49 | procedure bitAceptarClick(Sender: TObject);
50 | procedure bitAplicarClick(Sender: TObject);
51 | procedure bitCancelClick(Sender: TObject);
52 | procedure FormCreate(Sender: TObject);
53 | procedure FormDestroy(Sender: TObject);
54 | procedure FormShow(Sender: TObject);
55 | procedure TreeView1Click(Sender: TObject);
56 | private
57 | function GetTabFromId(id: string): TTabSheet;
58 | function ActivateControl(ctlRef: TComponent): boolean;
59 | procedure MostEnVentana;
60 | { private declarations }
61 | public
62 | //msjError: string;
63 | edMacr : TSynEdit; //Referencia al editor panel de comando
64 | edRemo : TSynEdit; //Referencia al editor remoto
65 | //Frames de configuración
66 | fcEdMacr : TfraCfgSynEdit; //Editor de macros
67 | fcEdRemo : TfraCfgSynEdit; //Editor remoto
68 | //Evento
69 | OnPropertiesChanged: procedure of object; //Evento de cambio de propiedades
70 | public //Propiedades generales
71 | VerPanCom : boolean; //Panel de comandos
72 | VerBHerPcom : boolean; //Barra de herramientas
73 | VerBHerTerm : boolean; //Barra de herramientas
74 | VerBarEst : boolean; //Barra de estado
75 | TipAlineam : integer; //Tipo de alineamiento de pantalla
76 | RecentFiles : TStringList; //Lista de archivos recientes
77 | AbrirUltScr : boolean;
78 | public //Propiedades de rutas de archivos
79 | UltScript : string; //Último script editado
80 | foldTemp : string; { TODO : ¿Realmente conviene personalizar estas rutas? ¿Por qué no las dejamos fijas en las rutas que se definen en la unidad "Globales"? }
81 | foldMacros : string;
82 | foldLenguajes : string;
83 | public //Configuraciones de Macros
84 | TpoMax : integer;
85 | marLin : boolean;
86 | public //Configuraciones del explorador remoto
87 | TpoMax2: integer; //Tiempo máximo de espera
88 | MosRut : boolean; //muestra la ruta actual
89 | ListDet: boolean;
90 | MosOcul: boolean;
91 | RefDesp: boolean;
92 | public
93 | procedure Iniciar();
94 | procedure ReadFromFile(iniFile: string='');
95 | procedure SaveToFile(iniFile: string='');
96 | procedure Configurar(Id: string='');
97 | end;
98 |
99 | var
100 | Config: TConfig;
101 |
102 | implementation
103 | {$R *.lfm}
104 |
105 | { TConfig }
106 |
107 | procedure TConfig.FormCreate(Sender: TObject);
108 | begin
109 | RecentFiles := TStringList.Create;
110 | //Crea frames de configuración de SynEdit
111 | fcEdMacr:= TfraCfgSynEdit.Create(Self);
112 | fcEdMacr.Name := 'emac'; //Para que no de error de nombre
113 | fcEdMacr.parent := TabMacEdit;
114 |
115 | fcEdRemo:= TfraCfgSynEdit.Create(Self);
116 | fcEdRemo.Name := 'erem'; //Para que no de error de nombre
117 | fcEdRemo.parent := TabRemEdEdit;
118 |
119 | //Prepara página y Selecciona primera opción
120 | PageControl1.ShowTabs := false;
121 | TreeView1.Items[0].Selected:=true;
122 | TreeView1Click(self);
123 |
124 | cfgFile.VerifyFile;
125 | end;
126 | procedure TConfig.FormDestroy(Sender: TObject);
127 | begin
128 | RecentFiles.Destroy
129 | end;
130 | procedure TConfig.FormShow(Sender: TObject);
131 | begin
132 | MostEnVentana; //carga las propiedades en el frame
133 | end;
134 | procedure TConfig.Iniciar();
135 | //Inicia el formulario de configuración. Debe llamarse antes de usar el formulario y
136 | //después de haber cargado todos los frames.
137 | begin
138 | //Configuraciones generales
139 | cfgFile.Asoc_Bol('VerPanCom' , @VerPanCom , true);
140 | cfgFile.Asoc_Bol('VerBHerPcom', @VerBHerPcom, true);
141 | cfgFile.Asoc_Bol('VerBHerTerm', @VerBHerTerm, true);
142 | cfgFile.Asoc_Bol('VerBarEst' , @VerBarEst , true);
143 | cfgFile.Asoc_Int('TipAlineam' , @TipAlineam , 0);
144 | cfgFile.Asoc_StrList('Recents_ses', @RecentFiles);
145 | //Propiedades de rutas de archivos
146 | cfgFile.Asoc_Str('UltScript' , @UltScript ,'');
147 | cfgFile.Asoc_Bol('AbrirUltScr', @AbrirUltScr, chkOpenLast , true);
148 | cfgFile.Asoc_Str('foldTemp' , @foldTemp , DirectoryEdit1, patTemp);
149 | cfgFile.Asoc_Str('Macros' , @foldMacros , DirectoryEdit2, patMacros);
150 | cfgFile.Asoc_Str('Lenguajes' , @foldLenguajes , DirectoryEdit3, patSyntax);
151 | //Configuraciones de foldMacros
152 | cfgFile.Asoc_Int('TpoMax' , @TpoMax, edTpoMax , 10, 1, 180);
153 | cfgFile.Asoc_Bol('MarLin' , @marLin, chkMarLin, false);
154 | //Configuración de editor de foldMacros
155 | fcEdMacr.Iniciar('edMacros', cfgFile, $E8FFE8);
156 | //Configuración de editor remoto
157 | fcEdRemo.Iniciar('edRemoto', cfgFile);
158 | //Configuraciones del explorador remoto
159 | cfgFile.Asoc_Int('TpoMax2' , @TpoMax2, edTpoMax1 , 10, 1, 180);
160 | cfgFile.Asoc_Bol('MosRut' , @MosRut , chkMosRut , true);
161 | cfgFile.Asoc_Bol('ListDet' , @ListDet, chkListDet, true);
162 | cfgFile.Asoc_Bol('MosOcul' , @MosOcul, chkMosOcul, false);
163 | cfgFile.Asoc_Bol('RefDesp' , @RefDesp, chkRefDesp, true);
164 |
165 | //lee parámetros del archivo de configuración.
166 | ReadFromFile;
167 | end;
168 | function TConfig.GetTabFromId(id: string): TTabSheet;
169 | {Retorna una página del PageControl, de acuerdo al ID indicado.}
170 | begin
171 | case id of
172 | '1',
173 | '1.1' : exit(TabGeneral);
174 | '1.2' : exit(TabFilePath);
175 | '2',
176 | '2.1' : exit(TabMacSett);
177 | '2.2' : exit(TabMacEdit);
178 | '3',
179 | '3.1' : exit(TabRemEdEdit);
180 | '4' : exit(TabRemExpl);
181 | else
182 | exit(nil);
183 | end;
184 | end;
185 | procedure TConfig.TreeView1Click(Sender: TObject);
186 | var
187 | id: String;
188 | begin
189 | if TreeView1.Selected = nil then exit;
190 | //hay ítem seleccionado
191 | id := IdFromTTreeNode(TreeView1.Selected);
192 | if GetTabFromId(id) <> nil then GetTabFromId(id).Show;
193 | end;
194 | function TConfig.ActivateControl(ctlRef: TComponent): boolean;
195 | {Intenta seleccionar un control de la ventana de la configuración, a partir de una
196 | referencia "TComponente". Si logra la identifiación, devuelve en:
197 | "ctl" -> El control como un TWinControl.
198 | "tab" -> El contenedor como un TTabSheet.
199 | }
200 | var
201 | pag: TComponent;
202 | tab: TTabSheet;
203 | it: TTreeNode;
204 | id: String;
205 | ctl: TWinControl;
206 | begin
207 | if ctlRef=nil then exit(false);
208 | //Busca al contenedor
209 | pag := ctlRef.GetParentComponent;
210 | if pag.ClassName = 'TTabSheet' then begin
211 | //Lo contiene un TTabSheet. Lo activamos.
212 | tab := TTabSheet(pag);
213 | //tab.Show; Esto activaría la página, pero no actualizaría el TreeView1
214 | //Busca el ítem del árbol que activa esa página
215 | for it in TreeView1.Items do begin
216 | id := IdFromTTreeNode(it); //Obtiene ID
217 | if GetTabFromId(id)=nil then continue;
218 | if GetTabFromId(id) = tab then begin
219 | //Encontramos el id que selecciona al "tab2.
220 | it.Selected := true; //Selecciona en el TreeView1
221 | TreeView1Click(self); //Activa el "tab".
222 | //Intenta seleccionar al control
223 | if ctlRef is TWinControl then begin
224 | ctl := TWinControl(ctlRef);
225 | if (it.Visible=true) and (ctl.Visible = true) and ctl.CanFocus then begin
226 | ctl.SetFocus;
227 | end;
228 | end;
229 | exit(true); //Se ubicó
230 | end;
231 | end;
232 | //No se encontró al ítem que selecciona a este "tab".
233 | exit(false);
234 | end else begin
235 | //No se conoce al contenedor
236 | exit(false);
237 | end;
238 | end;
239 | procedure TConfig.bitAceptarClick(Sender: TObject);
240 | begin
241 | bitAplicarClick(Self);
242 | if cfgFile.MsjErr<>'' then exit; //hubo error
243 | self.Close; //porque es modal
244 | end;
245 | procedure TConfig.bitAplicarClick(Sender: TObject);
246 | begin
247 | if not cfgFile.WindowToProperties then begin
248 | //Se produjo un error
249 | //Trata de seleccionar al control con error.
250 | ActivateControl(cfgFile.ctlErr.ctlRef);
251 | MsgErr(cfgFile.MsjErr);
252 | exit;
253 | end;
254 | //Valida las rutas leidas
255 | if not DirectoryExists(foldTemp) then begin
256 | MsgExc('Folder not found: %s',[foldTemp]);
257 | foldTemp := patTemp;
258 | end;
259 | if not DirectoryExists(foldMacros) then begin
260 | MsgExc('Folder not found: %s', [foldMacros]);
261 | foldMacros := patMacros;
262 | end;
263 | if not DirectoryExists(foldLenguajes) then begin
264 | MsgExc('Folder not found: %s', [foldLenguajes]);
265 | foldLenguajes := patSyntax;
266 | end;
267 | if OnPropertiesChanged<>nil then OnPropertiesChanged();
268 | SaveToFile; //Guarda propiedades en disco
269 | end;
270 | procedure TConfig.bitCancelClick(Sender: TObject);
271 | begin
272 | self.Hide;
273 | end;
274 | procedure TConfig.Configurar(Id: string='');
275 | //Muestra el formulario, de modo que permita configurar la sesión actual
276 | var
277 | it: TTreeNode;
278 | begin
279 | if Id<> '' then begin /////se pide mostrar un Id en especial
280 | //oculta los demás
281 | it := TTreeNodeFromId(Id,TreeView1);
282 | if it <> nil then it.Selected:=true;
283 | TreeView1Click(self);
284 | end else begin ////////muestra todos
285 | for it in TreeView1.Items do begin
286 | it.Visible:=true;
287 | end;
288 | end;
289 | Showmodal;
290 | end;
291 |
292 | procedure TConfig.MostEnVentana;
293 | //Muestra las propiedades en la ventana de configuración.
294 | begin
295 | if not cfgFile.PropertiesToWindow then begin
296 | MsgErr(cfgFile.MsjErr);
297 | end;
298 | end;
299 | procedure TConfig.ReadFromFile(iniFile: string = '');
300 | begin
301 | if not cfgFile.FileToProperties then begin
302 | MsgErr(cfgFile.MsjErr);
303 | end;
304 | if OnPropertiesChanged<>nil then OnPropertiesChanged();
305 | end;
306 | procedure TConfig.SaveToFile(iniFile: string='');
307 | //Escribe el archivo de configuración
308 | begin
309 | if not cfgFile.PropertiesToFile then begin
310 | MsgErr(cfgFile.MsjErr);
311 | end;
312 | end;
313 |
314 | end.
315 |
316 |
--------------------------------------------------------------------------------
/languages/SQLOracle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | "ALTER SESSION SET "
7 | "BEGIN
END;"
8 | "COMMIT;"
9 | "CREATE OR REPLACE "
10 | "CREATE TABLE nombre(
11 | campo1 tipo1,
campo2 tipo2);"
12 | "CREATE INDEX "
13 | "CREATE UNIQUE INDEX nombre ON tabla(campos)"
14 | "CREATE SEQUENCE "
15 | "CREATE SEQUENCE nombre MINVALUE valor START WITH valor INCREMENT BY valor;"
16 | "CREATE SYNONYM "
17 | "CREATE VIEW "
18 | "CURSOR nombre IS consulta;"
19 | "dbms_output.enable("
20 | "dbms_output.put_line("
21 | "DECLARE
variables
BEGIN cuerpo END;"
22 | "DELETE FROM"
23 | "DELETE FROM nombre WHERE condición;"
24 | "DROP INDEX "
25 | "DROP TABLE "
26 | "END IF;"
27 | "END;"
28 | "EXCEPTION
WHEN OTHERS THEN NULL;"
29 | "EXECUTE INMEDIATE "
30 | "FOR i IN 1..n LOOP
END LOOP;"
31 | "FOR i IN nombre_de_cursor LOOP
END LOOP;"
32 | "FOREIGN KEY"
33 | "FORMAT "
34 | "FORMAT A9"
35 | "FORMAT 99.99"
36 | "FUNCTION nombre(parámetros) RETURN tipo IS
BEGIN
END;"
37 | "GROUP BY "
38 | "IF THEN ELSE END IF;"
39 | "IF THEN ELSIF END IF;"
40 | "IF NOT "
41 | "INCREMENT BY "
42 | "INDEX "
43 | "INSERT "
44 | "INSERT INTO tabla VALUES(valores_separados_por_comas);"
45 | "LOCK TABLE tabla IN EXCLUSIVE MODE;"
46 | "ORDER BY "
47 | "PROCEDURE nombre(parámetros) IS
BEGIN
END;"
48 | "PROMPT mensaje"
49 | "RENAME nombre TO nuevo_nombre;"
50 | "ROLLBACK;"
51 | "ROWNUM < 10"
52 | "SELECT * FROM "
53 | "SELECT count( *) FROM "
54 | "SELECT table_name FROM tabs WHERE table_name LIKE '%%';"
55 | "SELECT campos FROM tabla
WHERE condición ORDER BY campos;"
56 | "SET LINESIZE 1000"
57 | "SET PAGESIZE 5000"
58 | "SPOOL OFF"
59 | "SPOOL c:\aaa.txt"
60 | "TRUNCATE TABLE"
61 | "UNION ALL"
62 | "UPDATE tabla SET campo=valor, ... WHERE condicion;"
63 | "WHILE condicion LOOP
END LOOP;"
64 |
65 |
66 | "PRIMERO "
67 | "EN "
68 | "fecha "
69 | "FINCONSULTAR"
70 | "FINDEFINIR"
71 | "FINPARA"
72 | "HACER "
73 |
74 | "$COLUMNAS()"
75 | "$COLUMNAS(""tabla"")"
76 | "$CONSULTAR "
77 | "$CONSULTAR FINCONSULTAR"
78 | "$DEFINIR "
79 | "$DEFINIR nombre COMO cuerpo FINDEFINIR"
80 | "$DEFINIR nombre = valor"
81 | "$DIR_ACTUAL"
82 | "$DIR_ACTUAL()"
83 | "$EXPR("
84 | "$EXPR(1+1)"
85 | "$FECHA_ACTUAL("
86 | "$FECHA_ACTUAL(0,""dd/mm/yyyy"")"
87 | "$FECHA_ACTUAL(-1,""yyyy/mm/dd"")"
88 | "$FORMATO("
89 | "$FORMATO(fecha ,""ddd dd/mm/yyyy"")"
90 | "$FORMATO(5,""0000"")"
91 | "$HORAS"
92 | "$INCLUIR "
93 | "$INCLUIR D:\aaa.txt"
94 | "$INDICES()"
95 | "$INDICES(""tabla"")"
96 | "$INFOTABLA()"
97 | "$INFOTABLA(""tabla"")"
98 | "$INFOVISTA()"
99 | "$INFOVISTA(""vista"")"
100 | "$LEE_CADENA()"
101 | "$LEE_FECHA()"
102 | "$LEE_NUMERO()"
103 | "$MESES"
104 | "$NOM_ACTUAL"
105 | "$NOM_ACTUAL()"
106 | "$PARA "
107 | "$PARA EN HACER FINPARA"
108 | "$PARA x EN 1 2 3 HACER
FINPARA"
109 | "$PSQL_REINIC"
110 | "$REDEF "
111 | "$REDEF nombre COMO cuerpo FINDEFINIR"
112 | "%ROWTYPE"
113 | "%TYPE"
114 |
115 |
116 | "SESSION SET"
117 | "TABLE "
118 | "TABLE tabla ADD columna tipo;"
119 | "TABLE tabla MODIFY columna tipo;"
120 | "TABLE tabla DROP columna;"
121 | "INDEX "
122 | "INDEX índice REBUILD;"
123 | "INDEX índice RENAME TO índice;"
124 | "INDEX índice STORAGE (PCTINCREASE 50);"
125 | "INDEX VISIBLE;"
126 |
127 |
128 | DUAL
129 | USER_TABLES
130 | USER_VIEWS
131 | ALL_TABLES
132 | ALL_VIEWS
133 | TABS
134 |
135 |
136 | APPINFO
137 | ARRAYSIZE
138 | AUTOCOMMIT
139 | AUTOPRINT
140 | AUTORECOVERY
141 | AUTOTRACE
142 | BLOCKTERMINATOR
143 | BTITLE
144 | CMDSEP
145 | COLSEP
146 | COMPATIBILITY
147 | CONCAT
148 | COPYCOMMIT
149 | COPYTYPECHECK
150 | DEFINE
151 | DESCRIBE
152 | MARKUP
153 | ECHO
154 | EDITFILE
155 | EMBEDDED
156 | ESCAPE
157 | FEEDBACK
158 | FLAGGER
159 | FLUSH
160 | HEADING
161 | HEADSEP
162 | INSTANCE
163 | LINESIZE
164 | "LINESIZE 500"
165 | LNO
166 | LOBOFFSET
167 | LOGSOURCE
168 | LONG
169 | LONGCHUNKSIZE
170 | NEWPAGE
171 | NLS_DATE_FORMAT
172 | "NLS_DATE_FORMAT = 'DD/MM/YYYY';"
173 | "NLS_DATE_FORMAT = 'YYYY/MM/DD';"
174 | "NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS';"
175 | NULL
176 | NUMFORMAT
177 | NUMWIDTH
178 | PAGESIZE
179 | "PAGESIZE 5000"
180 | PAUSE
181 | PNO
182 | RECSEP
183 | RECSEPCHAR
184 | RELEASE
185 | REPFOOTER
186 | REPHEADER
187 | SERVEROUTPUT
188 | SHIFTINOUT
189 | SHOWMODE
190 | SPOOL
191 | SQLBLANKLINES
192 | SQLCASE
193 | SQLCODE
194 | SQLCONTINUE
195 | SQLNUMBER
196 | SQLPREFIX
197 | SQLPROMPT
198 | SQLTERMINATOR
199 | SUFFIX
200 | TAB
201 | TERMOUT
202 | TIME
203 | TIMING
204 | TRIMOUT
205 | TRIMSPOOL
206 | TTITLE
207 | UNDERLINE
208 | USER
209 | VERIFY
210 | WRAP
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 | ACCESS ACCOUNT ACTIVATE ADD ADMIN ADVISE AFTER ALL ALL_ROWS ALLOCATE ALTER ANALYZE AND ANY
222 | ARCHIVE ARCHIVELOG ARRAY AS ASC AT AUDIT AUTHENTICATED AUTHORIZATION AUTOEXTEND AUTOMATIC
223 | BACKUP BECOME BEFORE BEGIN BETWEEN BFILE BITMAP BLOB BLOCK BODY BY
224 | COLAUTH CLUSTERS COL CRASH
225 | CACHE CACHE_INSTANCES CANCEL CASCADE CAST CFILE CHAINED CHANGE CHAR CHAR_CS CHARACTER CHECK CHECKPOINT
226 | CHOOSE CHUNK CLEAR CLOB CLONE CLOSE CLOSE_CACHED_OPEN_CURSORS CLUSTER COALESCE COLUMN COLUMNS
227 | COMMENT COMMIT COMMITTED COMPATIBILITY COMPILE COMPLETE COMPOSITE_LIMIT COMPRESS COMPUTE CONNECT
228 | CONNECT_TIME CONSTRAINT CONSTRAINTS CONTENTS CONTINUE CONTROLFILE CONVERT COST CPU_PER_CALL
229 | CPU_PER_SESSION CREATE CURRENT CURRENT_SCHEMA CURREN_USER CURSOR CYCLE
230 | DEFINE DESCRIBE
231 | DANGLING DATABASE DATAFILE DATAFILES DATAOBJNO DATE DBA DBHIGH DBLOW DBMAC DEALLOCATE DEBUG
232 | DEC DECIMAL DECLARE DEFAULT DEFERRABLE DEFERRED DEGREE DELETE DEREF DESC DIRECTORY DISABLE DISCONNECT
233 | DISMOUNT DISTINCT DISTRIBUTED DML DOUBLE DROP DUMP
234 | ELSIF EXCEPTION EXEC EXIT
235 | EACH ELSE ENABLE END ENFORCE ENTRY ESCAPE EXCEPT EXCEPTIONS EXCHANGE EXCLUDING EXCLUSIVE EXECUTE
236 | EXISTS EXPIRE EXPLAIN EXTENT EXTENTS EXTERNALLY
237 | FORMAT
238 | FROM FAILED_LOGIN_ATTEMPTS FALSE FAST FILE FIRST_ROWS FLAGGER FLOAT FLOB FLUSH FOR FORCE FOREIGN FREELIST
239 | FREELISTS FULL FUNCTION
240 | GOTO
241 | GLOBAL GLOBALLY GLOBAL_NAME GRANT GROUP GROUPS
242 | HASH HASHKEYS HAVING HEADER HEAP
243 | IDENTIFIED IDGENERATORS IDLE_TIME IF IMMEDIATE IN INCLUDING INCREMENT INDEX INDEXED INDEXES INDICATOR
244 | IND_PARTITION INITIAL INITIALLY INITRANS INSERT INSTANCE INSTANCES INSTEAD INT INTEGER INTERMEDIATE
245 | INTERSECT INTO IS ISOLATION ISOLATION_LEVEL
246 | KEEP KEY KILL
247 | LOOP
248 | LABEL LAYER LESS LEVEL LIBRARY LIKE LIMIT LINK LIST LOB LOCAL LOCK LOCKED LOG LOGFILE LOGGING
249 | LOGICAL_READS_PER_CALL LOGICAL_READS_PER_SESSION LONG
250 | MANAGE MASTER MAX MAXARCHLOGS MAXDATAFILES MAXEXTENTS MAXINSTANCES MAXLOGFILES MAXLOGHISTORY
251 | MAXLOGMEMBERS MAXSIZE MAXTRANS MAXVALUE MIN MEMBER MINIMUM MINEXTENTS MINUS MINVALUE MLSLABEL
252 | MLS_LABEL_FORMAT MODE MODIFY MOUNT MOVE MTS_DISPATCHERS MULTISET
253 | NATIONAL NCHAR NCHAR_CS NCLOB NEEDED NESTED NETWORK NEW NEXT NOARCHIVELOG NOAUDIT NOCACHE
254 | NOCOMPRESS NOCYCLE NOFORCE NOLOGGING NOMAXVALUE NOMINVALUE NONE NOORDER NOOVERRIDE
255 | NOPARALLEL NOREVERSE NORMAL NOSORT NOT NOTHING NOWAIT NULL NUMBER NUMERIC NVARCHAR2
256 | OVERLAPS ORDER
257 | OBJECT OBJNO OBJNO_REUSE OF OFF OFFLINE OID OIDINDEX OLD ON ONLINE ONLY OPCODE OPEN OPTIMAL
258 | OPTIMIZER_GOAL OPTION OR ORGANIZATION OSLABEL OVERFLOW OWN
259 | PROMPT
260 | PACKAGE PARALLEL PARTITION PASSWORD PASSWORD_GRACE_TIME PASSWORD_LIFE_TIME PASSWORD_LOCK_TIME
261 | PASSWORD_REUSE_MAX PASSWORD_REUSE_TIME PASSWORD_VERIFY_FUNCTION PCTFREE PCTINCREASE PCTTHRESHOLD
262 | PCTUSED PCTVERSION PERCENT PERMANENT PLAN PLSQL_DEBUG POST_TRANSACTION PRECISION PRESERVE
263 | PRIMARY PRIOR PRIVATE PRIVATE_SGA PRIVILEGE PRIVILEGES PROCEDURE PROFILE PUBLIC PURGE
264 | QUEUE QUOTA
265 | RECORD
266 | RANGE RAW RBA READ READUP REAL REBUILD RECOVER RECOVERABLE RECOVERY REF REFERENCES REFERENCING
267 | REFRESH RENAME REPLACE RESET RESETLOGS RESIZE RESOURCE RESTRICTED RETURN RETURNING REUSE REVERSE
268 | REVOKE ROLE ROLES ROLLBACK ROW ROWID ROWNUM ROWS RULE
269 | SPOOL SQL SUBTYPE
270 | SELECT
271 | SAMPLE SAVEPOINT SB4 SCAN_INSTANCES SCHEMA SCN SCOPE SD_ALL SD_INHIBIT SD_SHOW SEGMENT SEG_BLOCK
272 | SEG_FILE SEQUENCE SERIALIZABLE SESSION SESSION_CACHED_CURSORS SESSIONS_PER_USER SET SHARE
273 | SHARED SHARED_POOL SHRINK SIZE SKIP SKIP_UNUSABLE_INDEXES SMALLINT SNAPSHOT SOME SORT SPECIFICATION
274 | SPLIT SQL_TRACE STANDBY START STATEMENT_ID STATISTICS STOP STORAGE STORE STRUCTURE SUCCESSFUL
275 | SWITCH SYS_OP_ENFORCE_NOT_NULL$ SYS_OP_NTCIMG$ SYNONYM SYSDATE SYSDBA SYSOPER SYSTEM
276 | TABAUTH TTITLE
277 | TABLE TABLES TABLESPACE TABLESPACE_NO TABNO TEMPORARY THAN THE THEN THREAD TIMESTAMP TIME TO
278 | TOPLEVEL TRACE TRACING TRANSACTION TRANSITIONAL TRIGGER TRIGGERS TRUE TRUNCATE TX TYPE
279 | UB2 UBA UID UNARCHIVED UNDO UNION UNIQUE UNLIMITED UNLOCK UNRECOVERABLE UNTIL UNUSABLE
280 | UNUSED UPDATABLE UPDATE USAGE USE USER USING
281 | VIEWS
282 | VALIDATE VALIDATION VALUE VALUES VARCHAR VARCHAR2 VARYING VIEW
283 | WHERE WHEN WHENEVER WITH WITHOUT WORK WRITE WRITEDOWN WRITEUP XID YEAR ZONE
284 |
285 |
286 | $DEFINIR
287 | $REDEF
288 | $INCLUIR
289 | $PARA
290 | $CONSULTAR
291 | CON
292 | COMO
293 | EN
294 | FINPARA
295 | FINDEFINIR
296 | HACER
297 | $dir_actual
298 | $nom_actual
299 | $fecha_actual
300 | $formato
301 | $intervalo_semana
302 | $psql_reinic
303 | $expr
304 | $horas
305 | $meses
306 | $infotabla
307 | $infovista
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 | /
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
--------------------------------------------------------------------------------
/_libraries/MiConfig-0.4.2/MiConfigXML.pas:
--------------------------------------------------------------------------------
1 | {
2 | MiConfigXml
3 | ===========
4 | Por Tito Hinostroza 29/07/2016
5 |
6 | Descripción
7 | ===========
8 | Unidad con rutinas de lectura/escritura de propiedades en archivos XML. Permite crear
9 | fácilmente, una ventana de configuración, con las opciones: ACEPTAR y CANCELAR.
10 | Es similar a MiConfigINI, pero trabaja con archivos XML.
11 |
12 | Para alamacenar las propiedades, se debe crear un objeto TMiConfigXML. Sin embargo,
13 | la unidad crea por defecto, una instancia de TMiConfigXML, llamada "cfgFile", que toma
14 | como nombre .xml
15 | Tiene como dependencia a la librería MisUtils.
16 |
17 | Por Tito Hinostroza 29/07/2016
18 | }
19 | unit MiConfigXML;
20 | {$mode objfpc}{$H+}
21 | interface
22 | uses
23 | Classes, SysUtils, Graphics, Forms, LCLType, Laz2_XMLCfg, MiConfigBasic;
24 | type
25 | { TMiConfigXML }
26 | {Clase base que es usada para manejar los campos de configuración.}
27 | TMiConfigXML = class(TMiConfigBasic)
28 | protected
29 | fileName : string; //archivo XML
30 | function DefaultFileName: string;
31 | procedure FileProperty(xmlCfg: TXMLConfig; const r: TParElem; FileToProp: boolean);
32 | function LoadXMLFile(filName: string; out xmlCfg: TXMLConfig): boolean;
33 | public
34 | secINI: string; //sección donde se guardarán los datos en un archivo INI
35 | procedure VerifyFile;
36 | function FileToProperties: boolean; virtual;
37 | function FileToPropertiesCat(xmlFil: string; cat: integer): boolean;
38 | function PropertiesToWindowCat(cat: integer): boolean;
39 | function PropertiesToFile: boolean; virtual;
40 | function GetFileName: string;
41 | procedure SetFileName(AValue: string);
42 | public //Constructor y Destructor
43 | constructor Create(XMLfile0: string);
44 | destructor Destroy; override;
45 | end;
46 |
47 | var
48 | cfgFile: TMiConfigXML; //Default XML Config file
49 |
50 | implementation
51 |
52 |
53 |
54 | { TMiConfigXML }
55 | function TMiConfigXML.LoadXMLFile(filName: string; out xmlCfg: TXMLConfig): boolean;
56 | {Carga el archivo "filName" en xmlCfg. Si hay error, actualiza "MsjError" y
57 | devuelve FALSE. Función creada para uso interno de la clase.}
58 | begin
59 | msjErr := '';
60 | Result := true;
61 | if not FileExists(filName) then begin
62 | ctlErr := nil;
63 | MsjErr := 'XML file does not exist.'; //errro
64 | exit(false); //para que no intente leer
65 | end;
66 | try
67 | xmlCfg := TXMLConfig.Create(nil);
68 | xmlCfg.Filename := filName; //lee archivo XML, al asignar propiedad
69 | except
70 | ctlErr := nil;
71 | MsjErr := Format('Error reading XML file: %s', [filName]);
72 | xmlCfg.Free;
73 | exit(false);
74 | end;
75 | end;
76 | function TMiConfigXML.DefaultFileName: string;
77 | {Devuelve el nombre por defecto del archvio de configuración}
78 | begin
79 | Result := ChangeFileExt(Application.ExeName,'.xml');
80 | end;
81 | procedure TMiConfigXML.VerifyFile;
82 | //Verifica si el archivo XML "FileName" existe. Si no, muestra un mensaje y lo crea.
83 | var
84 | F: textfile;
85 | begin
86 | if not FileExists(fileName) then begin
87 | Application.MessageBox(
88 | Pchar(Format('No XML file found: %s', [fileName])),
89 | '', MB_ICONERROR);
90 | //Crea uno vacío para leer las opciones por defecto
91 | AssignFile(F, fileName);
92 | Rewrite(F);
93 | writeln(F, '');
94 | writeln(F, '');
95 | writeln(F, '');
96 | CloseFile(F);
97 | end;
98 | end;
99 | procedure TMiConfigXML.FileProperty(xmlCfg: TXMLConfig; const r: TParElem; FileToProp: boolean);
100 | {Permite leer o escribir una propiedad en el archivo XML}
101 | var
102 | s, defStr: String;
103 | c: TColor;
104 | list: TStringList;
105 | begin
106 | if r.varRef = nil then exit; //se inició con NIL
107 | case r.asType of
108 | tp_Int, tp_Int_TEdit, tp_Int_TSpinEdit, tp_Int_TRadioGroup:
109 | if FileToProp then begin //lee entero
110 | r.AsInteger := xmlCfg.GetValue(r.asLabel + '/Val', r.defInt)
111 | end else begin
112 | xmlCfg.SetValue(r.asLabel + '/Val', r.AsInteger) ;
113 | end;
114 | //---------------------------------------------------------------------
115 | tp_Dbl, tp_Dbl_TEdit, tp_Dbl_TFloatSpinEdit:
116 | //No hay métodos para leer/escribir números flotantes. Se usarán cadena
117 | if FileToProp then begin
118 | defStr := FloatToStr(r.defDbl);
119 | s := xmlCfg.GetValue(r.asLabel + '/Val', defStr); //lee como cadena
120 | r.AsDouble := StrToFloat(s);
121 | end else begin
122 | s := FloatToStr(r.AsDouble);
123 | xmlCfg.SetValue(r.asLabel + '/Val', s) ;
124 | end;
125 | //---------------------------------------------------------------------
126 | tp_Str, tp_Str_TEdit, tp_Str_TEditButton, tp_Str_TCmbBox:
127 | if FileToProp then begin //lee cadena
128 | r.AsString := xmlCfg.GetValue(r.asLabel + '/Val', r.defStr);
129 | end else begin
130 | xmlCfg.SetValue(r.asLabel + '/Val', r.AsString) ;
131 | end;
132 | //---------------------------------------------------------------------
133 | tp_Bol, tp_Bol_TCheckBox, tp_Bol_TRadBut:
134 | if FileToProp then begin //lee booleano
135 | r.AsBoolean := xmlCfg.GetValue(r.asLabel + '/Val', r.defBol);
136 | end else begin
137 | xmlCfg.SetValue(r.asLabel + '/Val', r.AsBoolean);
138 | end;
139 | //---------------------------------------------------------------------
140 | tp_Enum, tp_Enum_TRadBut, tp_Enum_TRadGroup:
141 | if FileToProp then begin //lee enumerado como entero
142 | if r.varSiz = 4 then begin //tamaño común de las variable enumeradas
143 | r.AsInt32 := xmlCfg.GetValue(r.asLabel + '/Val', r.defInt);
144 | end else begin //tamaño no implementado
145 | msjErr := 'Enumerated type no handled.';
146 | exit;
147 | end;
148 | end else begin
149 | if r.varSiz = 4 then begin
150 | xmlCfg.SetValue(r.asLabel + '/Val', r.AsInt32) ;
151 | end else begin //tamaño no implementado
152 | msjErr := 'Enumerated type no handled.';
153 | exit;
154 | end;
155 | end;
156 | //---------------------------------------------------------------------
157 | tp_TCol_TColBut, tp_TCol_TColBox:
158 | if FileToProp then begin //lee TColor
159 | r.AsTColor := xmlCfg.GetValue(r.asLabel + '/Val', r.defCol); //lee como entero
160 | end else begin
161 | c := r.AsTColor;
162 | xmlCfg.SetValue(r.asLabel + '/Val', c) ; //escribe como entero
163 | end;
164 | tp_StrList, tp_StrList_TListBox:
165 | if FileToProp then begin //lee TStringList
166 | list := TStringList(r.varRef^);
167 | list.Text := xmlCfg.GetValue(r.asLabel + '/Val', ''); //lee como texto
168 | end else begin
169 | list := TStringList(r.varRef^);
170 | xmlCfg.SetValue(r.asLabel + '/Val', list.Text); //escribe como texto
171 | end;
172 | else //no se ha implementado bien
173 | msjErr := 'Design error.';
174 | exit;
175 | end;
176 | end;
177 | function TMiConfigXML.FileToProperties: boolean;
178 | {Lee de disco las propiedades registradas
179 | Si encuentra error devuelve FALSE, y el mensaje de error en "MsjErr", y el elemento
180 | con error en "ctlErr".}
181 | var
182 | r: TParElem;
183 | xmlCfg: TXMLConfig;
184 | begin
185 | if not LoadXMLFile(fileName, xmlCfg) then exit(false);
186 | for r in listParElem do begin
187 | FileProperty(xmlCfg, r, true);
188 | if msjErr<>'' then begin
189 | ctlErr := r; //elemento que produjo el error
190 | xmlCfg.Free; //libera
191 | exit(false); //sale con error
192 | end;
193 | if r.OnFileToProperty<>nil then r.OnFileToProperty;
194 | end;
195 | //Terminó con éxito. Actualiza los cambios
196 | if OnPropertiesChanges<>nil then OnPropertiesChanges;
197 | ctlErr := nil;
198 | xmlCfg.Free; //libera
199 | exit(true); //sale sin error
200 | end;
201 | function TMiConfigXML.FileToPropertiesCat(xmlFil: string; cat: integer): boolean;
202 | {Lee de disco las propiedades registradas con una categoría específica.
203 | Si encuentra error devuelve FALSE, y el mensaje de error en "MsjErr", y el elemento
204 | con error en "ctlErr".
205 | Es similar a FileToProperties(), pero no genera eventos. Se creó pensando usarse
206 | en casos como una rutina independiente para cargar solo ciertas propiedades de un
207 | archivo de configuración, como cuando se manejan configuraciones de colores (temas)}
208 | var
209 | r: TParElem;
210 | xmlCfg: TXMLConfig;
211 | begin
212 | if not LoadXMLFile(xmlFil, xmlCfg) then exit(false);
213 | for r in listParElem do begin
214 | if r.categ<>cat then continue; //ignora los de otra categoría
215 | FileProperty(xmlCfg, r, true);
216 | if msjErr<>'' then begin
217 | ctlErr := r; //elemento que produjo el error
218 | xmlCfg.Free; //libera
219 | exit(false); //sale con error
220 | end;
221 | end;
222 | //Terminó con éxito. Actualiza los cambios
223 | ctlErr := nil;
224 | xmlCfg.Free; //libera
225 | exit(true); //sale sin error
226 | end;
227 | function TMiConfigXML.PropertiesToWindowCat(cat: integer): boolean;
228 | {Versión de PropertiesToWindow, que solo trabaja con una categoría, y no genera
229 | eventos.}
230 | var
231 | r: TParElem;
232 | begin
233 | msjErr := '';
234 | for r in listParElem do begin
235 | if r.categ<>cat then continue; //ignora los de otra categoría
236 | PropertyWindow(r, true);
237 | if msjErr<>'' then begin
238 | ctlErr := r; //guarda la referencia al elemento, en caso de que haya error
239 | end;
240 | end;
241 | Result := (msjErr='');
242 | end;
243 | function TMiConfigXML.PropertiesToFile: boolean;
244 | {Guarda en disco las propiedades registradas
245 | Si encuentra error devuelve FALSE, y el mensaje de error en "MsjErr", y el elemento
246 | con error en "ctlErr".}
247 | var
248 | r: TParElem;
249 | xmlCfg: TXMLConfig;
250 | begin
251 | if FileExists(fileName) then begin //ve si existe
252 | if FileIsReadOnly(fileName) then begin
253 | ctlErr := nil;
254 | MsjErr := 'XML file is only read.';
255 | exit(false);
256 | end;
257 | end;
258 | try
259 | xmlCfg := TXMLConfig.Create(nil);
260 | xmlCfg.Filename := fileName; //lee archivo XML
261 | xmlCfg.Clear;
262 | except
263 | ctlErr := nil;
264 | MsjErr := Format('Error writing XML file: %s', [fileName]);
265 | xmlCfg.Free;
266 | exit(false);
267 | end;
268 | msjErr := '';
269 | for r in listParElem do begin
270 | if r.OnPropertyToFile<>nil then r.OnPropertyToFile; //se ejecuta antes
271 | FileProperty(xmlCfg, r, false);
272 | if msjErr<>'' then begin
273 | ctlErr := r; //elemento que produjo el error
274 | xmlCfg.Free; //libera
275 | exit(false); //sale con error
276 | end;
277 | end;
278 | xmlCfg.Flush;
279 | ctlErr := nil;
280 | xmlCfg.Free;
281 | exit(true); //sin error
282 | end;
283 | function TMiConfigXML.GetFileName: string;
284 | begin
285 | Result := fileName;
286 | end;
287 |
288 | procedure TMiConfigXML.SetFileName(AValue: string);
289 | begin
290 | fileName := AValue;
291 | end;
292 |
293 | //Constructor y Destructor
294 | constructor TMiConfigXML.Create(XMLfile0: string);
295 | begin
296 | inherited Create;
297 | fileName := XMLfile0;
298 | end;
299 | destructor TMiConfigXML.Destroy;
300 | begin
301 | inherited Destroy;
302 | end;
303 |
304 | initialization
305 | cfgFile := TMiConfigXML.Create(cfgFile.DefaultFileName);
306 |
307 | finalization
308 | cfgFile.Destroy;
309 | end.
310 |
311 |
--------------------------------------------------------------------------------
/_source/FormEditMacros.pas:
--------------------------------------------------------------------------------
1 | unit FormEditMacros;
2 |
3 | {$mode objfpc}{$H+}
4 |
5 | interface
6 |
7 | uses
8 | Classes, SysUtils, FileUtil, SynEdit, Forms, Controls, Graphics, Dialogs,
9 | LCLProc, Menus, ComCtrls, ActnList, StdActns, MisUtils, SynFacilUtils,
10 | UnTerminal, Parser, Globales, FrameTabSessions;
11 |
12 | type
13 |
14 | { TfrmEditMacros }
15 |
16 | TfrmEditMacros = class(TForm)
17 | published
18 | acFilOpen: TAction;
19 | acFilSaveAs: TAction;
20 | acFilSave: TAction;
21 | acFilNew: TAction;
22 | acFilExit: TAction;
23 | acSrchSearch: TAction;
24 | acSrchSearchNext: TAction;
25 | acSrchReplace: TAction;
26 | acEdiCopy: TEditCopy;
27 | acEdiCut: TEditCut;
28 | acEdiPaste: TEditPaste;
29 | acEdiRedo: TAction;
30 | acEdiSelecAll: TAction;
31 | acEdiUndo: TAction;
32 | AcHerConfig: TAction;
33 | AcHerEjec: TAction;
34 | AcHerDeten: TAction;
35 | AcHerGrab: TAction;
36 | ActionList: TActionList;
37 | acVerPanArc: TAction;
38 | ImageList1: TImageList;
39 | MainMenu1: TMainMenu;
40 | mnArchivo: TMenuItem;
41 | MenuItem10: TMenuItem;
42 | MenuItem11: TMenuItem;
43 | MenuItem12: TMenuItem;
44 | MenuItem13: TMenuItem;
45 | MenuItem14: TMenuItem;
46 | MenuItem15: TMenuItem;
47 | MenuItem16: TMenuItem;
48 | MenuItem18: TMenuItem;
49 | MenuItem19: TMenuItem;
50 | MenuItem20: TMenuItem;
51 | MenuItem21: TMenuItem;
52 | MenuItem22: TMenuItem;
53 | MenuItem24: TMenuItem;
54 | MenuItem25: TMenuItem;
55 | MenuItem26: TMenuItem;
56 | MenuItem27: TMenuItem;
57 | MenuItem28: TMenuItem;
58 | mnRecientes: TMenuItem;
59 | mnHerram: TMenuItem;
60 | mnEdicion: TMenuItem;
61 | MenuItem23: TMenuItem;
62 | MenuItem3: TMenuItem;
63 | MenuItem4: TMenuItem;
64 | MenuItem5: TMenuItem;
65 | MenuItem6: TMenuItem;
66 | MenuItem7: TMenuItem;
67 | MenuItem8: TMenuItem;
68 | MenuItem9: TMenuItem;
69 | OpenDialog1: TOpenDialog;
70 | PopupMenu1: TPopupMenu;
71 | SaveDialog1: TSaveDialog;
72 | StatusBar1: TStatusBar;
73 | ed: TSynEdit;
74 | ToolBar1: TToolBar;
75 | ToolButton1: TToolButton;
76 | ToolButton10: TToolButton;
77 | ToolButton11: TToolButton;
78 | ToolButton12: TToolButton;
79 | ToolButton13: TToolButton;
80 | ToolButton14: TToolButton;
81 | ToolButton2: TToolButton;
82 | ToolButton3: TToolButton;
83 | ToolButton4: TToolButton;
84 | ToolButton5: TToolButton;
85 | ToolButton6: TToolButton;
86 | ToolButton7: TToolButton;
87 | ToolButton8: TToolButton;
88 | ToolButton9: TToolButton;
89 | acVerBarEst: TAction;
90 | acVerNumLin: TAction;
91 | procedure acFilOpenExecute(Sender: TObject);
92 | procedure acFilSaveAsExecute(Sender: TObject);
93 | procedure acFilSaveExecute(Sender: TObject);
94 | procedure acFilNewExecute(Sender: TObject);
95 | procedure acFilExitExecute(Sender: TObject);
96 | procedure acEdiRedoExecute(Sender: TObject);
97 | procedure acEdiSelecAllExecute(Sender: TObject);
98 | procedure acEdiUndoExecute(Sender: TObject);
99 | procedure AcHerConfigExecute(Sender: TObject);
100 | procedure AcHerDetenExecute(Sender: TObject);
101 | procedure AcHerEjecExecute(Sender: TObject);
102 | procedure AcHerGrabExecute(Sender: TObject);
103 | procedure ChangeEditorState;
104 | procedure editChangeFileInform;
105 | procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
106 | procedure FormCreate(Sender: TObject);
107 | procedure FormDestroy(Sender: TObject);
108 | procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
109 | private
110 | edit: TSynFacilEditor;
111 | procedure MarcarError(nLin, nCol: integer);
112 | public
113 | sessions: TfraTabSessions;
114 | procedure Ejecutar(arc: string);
115 | procedure DetenerEjec;
116 | procedure Abrir(arc: string);
117 | procedure Init(sessions0: TfraTabSessions);
118 | end;
119 |
120 | var
121 | frmEditMacros: TfrmEditMacros;
122 |
123 | implementation
124 | uses FormConfig;
125 | {$R *.lfm}
126 |
127 | { TfrmEditMacros }
128 |
129 | procedure TfrmEditMacros.FormCreate(Sender: TObject);
130 | begin
131 | edit := TSynFacilEditor.Create(ed,'SinNombre', 'ttm');
132 | edit.OnChangeEditorState:=@ChangeEditorState;
133 | edit.OnChangeFileInform:=@editChangeFileInform;
134 | //define paneles
135 | edit.PanFileSaved := StatusBar1.Panels[0]; //panel para mensaje "Guardado"
136 | edit.PanCursorPos := StatusBar1.Panels[1]; //panel para la posición del cursor
137 | // edit.PanForEndLin := StatusBar1.Panels[2]; //panel para el tipo de delimitador de línea
138 | edit.PanCodifFile := StatusBar1.Panels[3]; //panel para la codificación del archivo
139 | edit.NewFile;
140 | edit.LoadSyntaxFromFile(patSyntax+DirectorySeparator+'Terminal Macro.xml');
141 | edit.InitMenuRecents(mnRecientes, nil); //inicia el menú "Recientes"
142 | InicEditorC1(ed); //inicia editor con configuraciones por defecto
143 | end;
144 |
145 | procedure TfrmEditMacros.FormCloseQuery(Sender: TObject; var CanClose: boolean);
146 | begin
147 | if edit.SaveQuery then CanClose := false; //cancela
148 | end;
149 |
150 | procedure TfrmEditMacros.FormDestroy(Sender: TObject);
151 | begin
152 | edit.Free;
153 | end;
154 |
155 | procedure TfrmEditMacros.FormDropFiles(Sender: TObject; const FileNames: array of String);
156 | begin
157 | //Carga archivo arrastrados
158 | if edit.SaveQuery then Exit; //Verifica cambios
159 | edit.LoadFile(FileNames[0]);
160 | end;
161 |
162 | procedure TfrmEditMacros.ChangeEditorState;
163 | begin
164 | acFilSave.Enabled:=edit.Modified;
165 | acEdiUndo.Enabled:=edit.CanUndo;
166 | acEdiRedo.Enabled:=edit.CanRedo;
167 | //Para estas acciones no es necesario controlarlas, porque son acciones pre-determinadas
168 | // acEdiCortar.Enabled := edit.canCopy;
169 | // acEdiCopiar.Enabled := edit.canCopy;
170 | // acEdiPegar.Enabled:= edit.CanPaste;
171 | end;
172 |
173 | procedure TfrmEditMacros.editChangeFileInform;
174 | begin
175 | //actualiza nombre de archivo
176 | Caption := 'Editor de Macros - ' + edit.FileName;
177 | end;
178 |
179 | /////////////////// Acciones de Archivo /////////////////////
180 | procedure TfrmEditMacros.acFilNewExecute(Sender: TObject);
181 | begin
182 | edit.NewFile;
183 | ed.Lines[0] := '// Sample of macro for '+NOM_PROG;
184 | ed.Lines.Add(dic('// Created: ') + DateTimeToStr(Now) );
185 | ed.Lines.Add('disconnect '+ '//Disconnect if it''s connected');
186 | ed.Lines.Add('connect "192.168.1.1" '+'//Connect to a new IP');
187 | ed.Lines.Add('wait "login: "');
188 | ed.Lines.Add('sendln "usuario"');
189 | ed.Lines.Add('wait "password: "');
190 | ed.Lines.Add('sendln "clave"');
191 | ed.Lines.Add('pause 3 '+'//wait for 3 seconds');
192 | ed.Lines.Add('sendln "cd /folder"');
193 | end;
194 | procedure TfrmEditMacros.acFilOpenExecute(Sender: TObject);
195 | begin
196 | OpenDialog1.Filter:='Tito''s Telnet Macro |*.ttm|Todos los archivos|*.*';
197 | OpenDialog1.InitialDir:=config.foldMacros; //busca aquí por defecto
198 | edit.OpenDialog(OpenDialog1);
199 | end;
200 | procedure TfrmEditMacros.acFilSaveExecute(Sender: TObject);
201 | begin
202 | edit.SaveFile;
203 | end;
204 | procedure TfrmEditMacros.acFilSaveAsExecute(Sender: TObject);
205 | begin
206 | SaveDialog1.InitialDir:=config.foldMacros; //busca aquí por defecto
207 | edit.SaveAsDialog(SaveDialog1);
208 | end;
209 | procedure TfrmEditMacros.acFilExitExecute(Sender: TObject);
210 | begin
211 | frmEditMacros.Close;
212 | end;
213 | procedure TfrmEditMacros.MarcarError(nLin, nCol: integer);
214 | begin
215 | //posiciona curosr
216 | // ed.CaretX := nCol;
217 | // ed.CaretY := nLin;
218 | ed.LogicalCaretXY:=Point(nCol,nLin);
219 | edit.RefreshPanCursor; //Para actualizar la información del cursor en el panel
220 | //define línea con error
221 | edit.linErr := nLin;
222 | ed.Invalidate; //refresca
223 | end;
224 |
225 | //////////// Acciones de Edición ////////////////
226 | procedure TfrmEditMacros.acEdiUndoExecute(Sender: TObject);
227 | begin
228 | edit.Undo;
229 | end;
230 | procedure TfrmEditMacros.acEdiRedoExecute(Sender: TObject);
231 | begin
232 | edit.Redo;
233 | end;
234 | procedure TfrmEditMacros.acEdiSelecAllExecute(Sender: TObject);
235 | begin
236 | ed.SelectAll;
237 | end;
238 | //////////// Acciones de Herramientas ////////////////
239 | procedure TfrmEditMacros.AcHerEjecExecute(Sender: TObject);
240 | begin
241 | cxp.Compilar(edit.FileName, ed.Lines);
242 | if cxp.HayError then begin
243 | MarcarError(cxp.ErrorLine, cxp.ErrorCol);
244 | cxp.ShowError;
245 | end;
246 | end;
247 | procedure TfrmEditMacros.AcHerGrabExecute(Sender: TObject);
248 | //Graba la onexión actual
249 | begin
250 | //Inicialización
251 | ed.ClearAll;
252 | ed.Lines.Add(dic('// Macro generated for ')+NOM_PROG);
253 | ed.Lines.Add(dic('// Date: ') + DateTimeToStr(Now) );
254 | ed.Lines.Add('DISCONNECT '+'//Disconnect if it''s connected');
255 | ed.Lines.Add('CLEAR '+'//Clear the terminal');
256 | //lee parámetros de la configuración actual
257 | if sessions.TabIndex = -1 then exit;
258 | case sessions.ActivePage.cType of
259 | TCON_TELNET: begin
260 | ed.Lines.Add('curTYPE := "Telnet"');
261 | end;
262 | TCON_SSH : begin
263 | ed.Lines.Add('curTYPE := "SSH"');
264 | end;
265 | TCON_SERIAL: begin
266 | ed.Lines.Add('curTYPE := "Serial"');
267 | end;
268 | TCON_OTHER : begin
269 | ed.Lines.Add('curTYPE := "Other" //Este es el tipo para otros procesos');
270 | ed.Lines.Add('curAPP := "'+ sessions.ActivePage.Other +'" //El proceso que vamoa a lanzar');
271 | end;
272 | end;
273 | case sessions.ActivePage.LineDelimSend of
274 | LDS_CRLF:
275 | ed.Lines.Add('curENDLINE := "CRLF" //El tipo de salto de línea a enviar');
276 | LDS_CR:
277 | ed.Lines.Add('curENDLINE := "CR" //El tipo de salto de línea a enviar');
278 | LDS_LF:
279 | ed.Lines.Add('curENDLINE := "LF" //El tipo de salto de línea a enviar');
280 | end;
281 | //conecta
282 | ed.Lines.Add('CONNECT '+'//Start connection');
283 | // PAUSE 3 //Espera unos segundos
284 | // DETECT_PROMPT //Configura la línea actual como el prompt
285 |
286 | end;
287 | procedure TfrmEditMacros.AcHerDetenExecute(Sender: TObject);
288 | begin
289 | DetenerEjec;
290 | end;
291 | procedure TfrmEditMacros.AcHerConfigExecute(Sender: TObject);
292 | begin
293 | config.Configurar('2');
294 | end;
295 | procedure TfrmEditMacros.DetenerEjec;
296 | //Detiene la ejecución de la macro en curso
297 | begin
298 | if not cxp.ejecProg then exit;
299 | cxp.stop := true; //manda mensaje para detener la macro
300 | end;
301 | procedure TfrmEditMacros.Ejecutar(arc: string);
302 | //Permite ejecutar una macro almacenada en un archivo externo
303 | var
304 | larc: TStringList;
305 | begin
306 | larc := Tstringlist.Create;
307 | larc.LoadFromFile(arc);
308 | cxp.Compilar(arc, larc);
309 | if cxp.HayError then begin
310 | self.Show; //por si no estaba visible
311 | //muestra error en el editor
312 | if edit.FileName= arc then begin
313 | //lo tiene en el editor
314 | MarcarError(cxp.ErrorLine,cxp.ErrorCol);
315 | cxp.ShowError;
316 | end else begin
317 | //no está abierto
318 | Abrir(arc); //lo abre
319 | MarcarError(cxp.ErrorLine,cxp.ErrorCol);
320 | cxp.ShowError;
321 | end;
322 | end;
323 | larc.Free;
324 | end;
325 | procedure TfrmEditMacros.Abrir(arc: string);
326 | //Permite editar una macro almacenada en un archivo externo
327 | begin
328 | if edit.SaveQuery then Exit; //Verifica cambios
329 | edit.LoadFile(arc);
330 | end;
331 |
332 | procedure TfrmEditMacros.Init(sessions0: TfraTabSessions);
333 | begin
334 | //Guarda referencia a las sesiones para controlarlas.
335 | sessions := sessions0;
336 | end;
337 |
338 | end.
339 |
340 |
--------------------------------------------------------------------------------