<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I would probably do something like this:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
const
<div>ansi_colors: array[0..7] of char = ('0', '4', '2', '6', '1', '5', '3', '7');</div>
<div><br>
</div>
<div>procedure PrintColor(fg, bg: byte; s: string);</div>
<div>var</div>
<div>tmp: string;</div>
<div>begin</div>
<div>tmp:=#27+'[0;3'+ansi_colors[fg]+';4'+ansi_colors[bg]+'m'+s+#27+'[0m';</div>
<div>writeln(tmp);</div>
<div>end;</div>
<div><br>
</div>
<div>begin</div>
<div>PrintColor(2, 0, 'derp');</div>
end.<br>
</div>
<div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Easy enough to remember pascal style color numbers.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">--</span><br>
</div>
<div id="Signature">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Alexander Grotewohl</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
https://dcclost.com</div>
</div>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> fpc-devel <fpc-devel-bounces@lists.freepascal.org> on behalf of J. Gareth Moreton via fpc-devel <fpc-devel@lists.freepascal.org><br>
<b>Sent:</b> Sunday, November 22, 2020 7:59 PM<br>
<b>To:</b> Ryan Joseph via fpc-devel <fpc-devel@lists.freepascal.org><br>
<b>Cc:</b> J. Gareth Moreton <gareth@moreton-family.com><br>
<b>Subject:</b> Re: [fpc-devel] Compiler message colour scheme</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">I'm getting there.  I keep getting distracted or lost though! Hardware
<br>
failures don't help!<br>
<br>
I'm trying a different approach this time and writing a whitepaper like <br>
I've done with my more major changes for Free Pascal, so I can describe <br>
its uses and how it works etc.  It can be updated of course, but it <br>
means I have something to refer to if I lose my way, and others can <br>
better add to the concept.<br>
<br>
In the case of that PrintColor example, I don't think it could be <br>
inlined, for example, due to the call to IntToStr, among other things <br>
(like if you call PrintColor with a non-constant actual parameter), but <br>
if IntToStr were a pure function as well (and there's no reason why it <br>
can't), then logically GenerateColorCode could easily be pure.<br>
<br>
I'm glad there's still interest in pure functions.  It may be a while <br>
though, and I'm being tempted with a bounty and Patreon pledges to <br>
implement "static single assignment" into the Free Pascal Compiler.  <br>
That will take some research to see if it's even possible and not prone <br>
to completely breaking things!<br>
<br>
First things first though, I've got a bug to fix in AArch64, and on the <br>
same platform, I'm almost finshed implementing the optimisation that <br>
turns division by a constant into a multiplication and shift.<br>
<br>
Gareth aka. Kit<br>
<br>
On 22/11/2020 21:37, Ryan Joseph via fpc-devel wrote:<br>
><br>
>> On Nov 22, 2020, at 10:09 AM, J. Gareth Moreton via fpc-devel <fpc-devel@lists.freepascal.org> wrote:<br>
>><br>
>> Personally I'd write the function as something like "function GenerateColorCode(codes: array of Byte): ansistring;", mostly in anticipation of pure functions, because then the compiler can just replace the call with the relevant string at compile time, but
 that's a long way off!<br>
> That would great. Hopefully this gets finished some day.<br>
><br>
> Regards,<br>
>        Ryan Joseph<br>
><br>
> _______________________________________________<br>
> fpc-devel maillist  -  fpc-devel@lists.freepascal.org<br>
> <a href="https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel">https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</a><br>
><br>
<br>
-- <br>
This email has been checked for viruses by Avast antivirus software.<br>
<a href="https://www.avast.com/antivirus">https://www.avast.com/antivirus</a><br>
<br>
_______________________________________________<br>
fpc-devel maillist  -  fpc-devel@lists.freepascal.org<br>
<a href="https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel">https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</a><br>
</div>
</span></font></div>
</body>
</html>