Norsk Freakforum

Gammel 7. september 2007, 12:38   #1
10goto10
Medlem
 
10goto10's Avatar
 
Registreringsdato: aug 2007
Sted: lignende
Innlegg: 267
Kvalitetspoeng: 26
ANSI-koder i konsollen til windows XP

Knoter jo litt med C++ for tiden, og fikk lyst til å få litt farger på teksten fra konsoll-programmene. Vil helst også ha det cross-plattform uten for mye knot.

Windows, selvsagt, har jo ikke ANSI-koder til sin cmd.exe konsoll. Før kunne man lastet ansi.sys, men XP/NT bruker ikke config.sys lenger. Dog en config.nt, men det fikk jeg ikke til. (ANSI.sys in NT - ikke helt XP men..)

Derimot fant jeg Ansicon , som jeg kunne kjøre de kompilerte programmene gjennom istedenfor cmd. Det eneste som trengs er å kopiere ansi.dll og ansicon.exe til et sted inneholdt i path-variabelen, eller rett i mappen til programmet du vil kjøre. Dermed blir det litt knot i windows, men så fungerer det i linux på samme måten også!

ved kommando-linjen:

ansisys programnavn

Funket fint med de fleste ANSI-kodene

laget et lite program for å teste:

Kode:
/*
   Colortext
   
   A test to display text in ANSI color codes

   Requires an ANSI driver loaded.
   
   In windows XP, use Jason Hood's ANSICON (freeware):
      http://www.geocities.com/jadoxa/ansicon/index.html
   
   Use:
      start cmd, then run program via ansicon:
         ansicon <programname> 
      
      in this case (to test):
         ansicon colortext

author: 10goto10 (sort of...just a test)
date: 2007.09.07


*/

#include <iostream>


using namespace std;

 // foreground normal text color
 const char *const ansi_black = "\033[30m";
 const char *const ansi_red = "\033[31m";
 const char *const ansi_green = "\033[32m";
 const char *const ansi_yellow = "\033[33m";
 const char *const ansi_blue = "\033[34m";
 const char *const ansi_magenta = "\033[35m";
 const char *const ansi_cyan = "\033[36m";
 const char *const ansi_white = "\033[37m";
 // foreground bold text color
 const char *const ansi_bblack = "\033[1;30m";
 const char *const ansi_bred = "\033[1;31m";
 const char *const ansi_bgreen = "\033[1;32m";
 const char *const ansi_byellow = "\033[1;33m";
 const char *const ansi_bblue = "\033[1;34m";
 const char *const ansi_bmagenta = "\033[1;35m";
 const char *const ansi_bcyan = "\033[1;36m";
 const char *const ansi_bwhite = "\033[1;37m";
 // background color
 const char *const ansib_black = "\033[40m";
 const char *const ansib_red = "\033[41m";
 const char *const ansib_green = "\033[42m";
 const char *const ansib_yellow = "\033[43m";
 const char *const ansib_blue = "\033[44m";
 const char *const ansib_magenta = "\033[45m";
 const char *const ansib_cyan = "\033[46m";
 const char *const ansib_white = "\033[47m";
 // special
 const char *const ansi_normal = "\033[0m";  // reset all text attributes to normal
 const char *const ansi_bold = "\033[1m";
 const char *const ansi_boldoff = "\033[2m"; //unreliable, use normal
 const char *const ansi_underline = "\033[4m"; // doesnt seem to work
 const char *const ansi_blinking = "\033[5m";  // doesnt seem to work
 const char *const ansi_reverse = "\033[7m";
 const char *const ansi_cls = "\033[2J";

using namespace std;

int main()
{
  
  cout << "COLOR TEXT TEST\n";
  
  cout << ansi_red << "Red " << ansi_bred << " bright red" << ansi_bwhite << " bright white" << ansi_normal << endl;  
  cout << ansi_green << "Green " << ansi_bgreen << " bright green" << ansi_normal << " normal" << endl;  
  cout << ansi_yellow << "Yellow " << ansi_byellow << " bright yellow" << ansi_normal << " normal" << endl;  
  cout << ansi_blue << "Blue " << ansi_bblue << " bright blue" << ansi_normal << " normal" << endl;  
  cout << ansi_magenta << "Magenta " << ansi_bmagenta << " bright magenta" << ansi_normal << " normal" << endl;  
  cout << ansi_cyan << "Cyan " << ansi_bcyan << " bright cyan" << ansi_normal << " normal" << endl;  

  cout << ansi_reverse << "Reverse " << ansi_yellow << ansi_reverse << " bright yellow reverse" << ansi_normal << " normal" << endl;  
  cout << ansi_red << ansi_bold << "Bold red " << ansi_boldoff << " test bold off" << ansi_bold << ansi_bwhite << " bold bright white" << ansi_normal << " normal" << endl;  

  cout << "\n         " << ansib_red << ansi_byellow << "press return" << ansi_normal << endl;
  
  cin.get();
  return 1;
}

Funket fint!
Funket også i linux (da uten å trenge en ansisys selvsagt)

Uten ansisys vil man se endel koder foran teksten som skulle vært formattert, litt forvirrende men fullt kjørbart som program.

10 goto 10
20 on error continue life
Svar på og siter dette innlegget
Svar

Sosiale bokmerker


Brukere som leser denne tråden nå: 1 (0 medlemmer og 1 uregistrerte)
 
Trådverktøy



Alle tidspunkt er GMT +2. Klokken er nå 10:43.