Created
January 11, 2012 05:28
-
-
Save dgv/1593205 to your computer and use it in GitHub Desktop.
spark lines for your shell - spark of @holman in free pascal
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
spark lines for your shell - for free pascal | |
based: https://github.com/holman/spark | |
$Spark: spark.lpr,v 1.0 2012/01/03 14:11:02 dgvargas Exp $ | |
} | |
program spark; | |
{$mode objfpc}{$H+} | |
uses | |
{$IFDEF UNIX}{$IFDEF UseCThreads} | |
cthreads, | |
{$ENDIF}{$ENDIF} | |
Classes, SysUtils, CustApp, StrUtils, Pipes | |
{ you can add units after this }; | |
type | |
{ TSpark } | |
TSpark = class(TCustomApplication) | |
protected | |
procedure DoRun; override; | |
public | |
constructor Create(TheOwner: TComponent); override; | |
destructor Destroy; override; | |
procedure WriteHelp; virtual; | |
end; | |
{ TSpark } | |
procedure TSpark.DoRun; | |
function Occurrences(const Substring, Text: string): integer; | |
var | |
offset: integer; | |
begin | |
result := 0; | |
offset := PosEx(Substring, Text, 1); | |
while offset <> 0 do | |
begin | |
inc(result); | |
offset := PosEx(Substring, Text, offset + length(Substring)); | |
end; | |
end; | |
const | |
Ticks : array[0..7] of string = ('▁','▂','▃','▄','▅','▆','▇','█'); | |
var | |
ErrorMsg, params_line, string_number: String; | |
i,f,n: integer; | |
min, max: longword; | |
numbers: array of longword; | |
begin | |
// quick check parameters | |
ErrorMsg:=CheckOptions('h','help'); | |
if ErrorMsg<>'' then begin | |
ShowException(Exception.Create(ErrorMsg)); | |
Terminate; | |
Exit; | |
end; | |
// parse parameters | |
if HasOption('h','help') or (ParamCount=0) then begin | |
WriteHelp; | |
Terminate; | |
Exit; | |
end; | |
if (ParamCount=1) then begin | |
setlength(numbers,(Occurrences(',',Params[1])+1)); | |
params_line:=StringReplace(Params[1],',',' ',[rfReplaceAll]); | |
end | |
else | |
begin | |
setlength(numbers,ParamCount); | |
for n:=1 to ParamCount do begin | |
params_line:= params_line+ Params[n]+' '; | |
end; | |
params_line:= copy(params_line,1,length(params_line)-1); | |
end; | |
// load numbers | |
i:=0; | |
string_number:=''; | |
for n:=1 to length(params_line) do begin | |
if params_line[n]<>' ' then begin | |
string_number:= string_number+params_line[n]; | |
if n = length(params_line) then | |
numbers[i]:= StrToQWordDef(string_number,1); | |
end | |
else | |
begin | |
numbers[i]:= StrToQWordDef(string_number,1); | |
string_number:= ''; | |
inc(i); | |
end; | |
end; | |
// determine range | |
min:= $ffffffff; | |
max:= 0; | |
for n:=0 to length(numbers)-1 do begin | |
if (numbers[n] < min) then min:= numbers[n]; | |
if (numbers[n] > max) then max:= numbers[n]; | |
end; | |
f:= trunc(((max-min) shl 8)/(length(Ticks)-1)); | |
if (f < 1) then f:= 1; | |
// print ticks | |
for n:=0 to length(numbers)-1 do begin | |
Write(Ticks[trunc(((numbers[n]-min) shl 8)/f)]); | |
end; | |
WriteLn(''); | |
Terminate; | |
end; | |
constructor TSpark.Create(TheOwner: TComponent); | |
begin | |
inherited Create(TheOwner); | |
StopOnException:=True; | |
end; | |
destructor TSpark.Destroy; | |
begin | |
inherited Destroy; | |
end; | |
procedure TSpark.WriteHelp; | |
begin | |
writeln(' USAGE:'#10, | |
' ',ExtractFileName(ExeName),' [-h] VALUE,...'#10, | |
' EXAMPLES:'#10, | |
' spark 1 5 22 13 53'#10, | |
' ▁▁▃▂█'#10, | |
' spark 0,30,55,80,33,150'#10, | |
' ▁▂▃▄▂█'#10); | |
{' echo 9 13 5 17 1 | spark'#10, | |
' ▄▆▂█▁'#10); pipe dont works =( } | |
end; | |
var | |
Application: TSpark; | |
{$IFDEF WINDOWS}{$R spark.rc}{$ENDIF} | |
{$IFDEF WINDOWS}{$R spark.rc}{$ENDIF} | |
begin | |
Application:=TSpark.Create(nil); | |
Application.Title:='Spark'; | |
Application.Run; | |
Application.Free; | |
end. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment