Improved prompting
This commit is contained in:
parent
d1d371afb4
commit
05c26ed91f
|
@ -0,0 +1,64 @@
|
|||
unit UCRTHelper;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, crt;
|
||||
|
||||
type
|
||||
TPromptMode = (pmNormal, pmPassword);
|
||||
|
||||
function Prompt(ACaption: String; AMode: TPromptMode = pmNormal): String; overload;
|
||||
function Prompt(ACaption, ADefault: String; AMode: TPromptMode = pmNormal): String; overload;
|
||||
|
||||
implementation
|
||||
|
||||
function Prompt(ACaption: String; AMode: TPromptMode): String;
|
||||
begin
|
||||
Prompt(ACaption, '', AMode);
|
||||
end;
|
||||
|
||||
function Prompt(ACaption, ADefault: String; AMode: TPromptMode): String;
|
||||
var
|
||||
c: Char;
|
||||
begin
|
||||
Write(ACaption);
|
||||
if ADefault <> '' then
|
||||
Write(' [', ADefault, ']');
|
||||
Write(': ');
|
||||
|
||||
Result := '';
|
||||
repeat
|
||||
c := ReadKey;
|
||||
if (c = #8) and (Length(Result) > 0) then
|
||||
begin
|
||||
Write(#8, ' ', #8);
|
||||
end
|
||||
else if c > #31 then
|
||||
begin
|
||||
Result := Result + c;
|
||||
|
||||
case AMode of
|
||||
pmNormal: Write(c);
|
||||
pmPassword: Write('*');
|
||||
end;
|
||||
end;
|
||||
until (c = #13) or (c = ^C);
|
||||
|
||||
if (c = #13) and (Result = '') then
|
||||
begin
|
||||
Result := ADefault;
|
||||
Write(ADefault);
|
||||
end;
|
||||
|
||||
if c = #13 then
|
||||
Writeln;
|
||||
|
||||
if c = ^C then
|
||||
Result := ''; //Pretend that nothing happened.
|
||||
end;
|
||||
|
||||
end.
|
||||
|
|
@ -55,11 +55,15 @@
|
|||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<Units Count="1">
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="restemplate.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="UCRTHelper.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
|
|
@ -28,7 +28,7 @@ uses
|
|||
JTemplate,
|
||||
fpjson, jsonparser,
|
||||
DOM, XMLRead, XMLWrite,
|
||||
RegExpr, crt;
|
||||
RegExpr, crt, UCRTHelper;
|
||||
|
||||
type
|
||||
TContentType = (ctOther, ctJSON, ctXML);
|
||||
|
@ -112,17 +112,11 @@ procedure CmdAskUser(AName: String);
|
|||
var
|
||||
value, default: String;
|
||||
begin
|
||||
Write(AName);
|
||||
default := sessionIni.ReadString(templateName, AName, '');
|
||||
if default <> '' then
|
||||
Write(' [', default, ']: ')
|
||||
else
|
||||
Write(': ');
|
||||
|
||||
ReadLn(value);
|
||||
value := Prompt(AName, default);
|
||||
|
||||
if value = '' then
|
||||
value := default;
|
||||
Halt(3); //Cancelled
|
||||
|
||||
parser.Fields.Add(AName, value);
|
||||
|
||||
|
|
Loading…
Reference in New Issue