Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
http://www.evergreen.edu/...otes/program/ansi_esc.htm
Hier kunnen we lezen:
Er staan ook wat leuke voorbeeldjes, maar ik denk dat dit gemakkelijk te vinden is allemaal.Restrictions:
Windows NT does not support ANSI.SYS escape sequences in Win32 Console applications.
The Windows 2000/NT Command Interpreter, CMD.EXE, does not support ANSI.SYS. Use COMMAND.COM instead.
-
Als je er nu achter komt dat bepaalde commando's in een batchfile nog steeds niet ANSI codes interprete, moet je eens opletten ofdat je er achter kan komen waarom dat is.
Wat gebeurt er namelijk op het moment dat jij een batchfile uitvoert - Windows start in de background een cmd.exe op (je ziet dat aan het feit dat er bijvoorbeeld tijdelijk scrollbars komen in je window die er niet zijn), voert hierin de batchfile uit, en returned naar het parent process.
• command.com

• cmd.exe

• command.com

Hoe kan je dit dan toch simpel oplossen? Je kan Windows forceren om jouw batchfile uit te laten voeren met command.com, zie hier het verschil:
Om de een of andere reden werkt het nog steeds niet met het perlscript, zelfs niet als ik dus doe 'command /c perl script.pl'. Dus ik heb jou voorbeeld gevolgd en een simpel batch-bestandje gemaakt die ANSI-kleurtjes zou moeten maken. Deze uitvoeren met 'command /c batch.bat' geeft gelukkig wel het gewenste resultaat.
Toen ben ik even goed gaan opletten, en ik ontdekte dat als ik typ 'command /c perl script.pl', dat die scrollbars van cmd.exe TOCH verschijnen. Ligt dat aan Perl?

Ligt dat aan mijn (on)kunde? Ik weet het niet, dus vraag ik nogmaals om hulp.
Waarschijnlijk heeft het er ook mee te maken dat een batch-bestand door command.com intern uitgevoerd kan worden, maar dat voor het starten van perl.exe toch cmd.exe nodig is. Valt dit te omzeilen? Moet ik iets anders vinden dan perl of afzien van de kleurtjes?
[ Voor 18% gewijzigd door muba op 08-10-2003 00:48 ]
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Traditioneel gezien worden er op DOS en Windows eigenlijk ANSi code interpreters ingebouwd in de software die ANSi uitspuugt (als je kijkt bv. naar de wat oudere ANSI-BBS terminals zoals Telix of Terminate, deze hadden allemaal eigen telnet emulators 'on board').
Zo te zien is dit precies wat je zoekt - een Perl library om ANSi codes te interpreten.
Mag ik overigens vragen waarom je ANSI codes wilt gaan gebruiken in een Perl programma? Je kan in de Win32 console ook direct aanspreken onder Perl zo te zien (click) en dat is code technisch gezien 'mooier' dan via een interpreter.
Die tweede link, wat daar in staat ken ik wel, maar uiteindelijk spuugt dat ook gewoon letterlijk ansi-escape sequences uit.
Ik zal een kleine toelichting geven. Ik weet niet of je bekend bent met het fenomeen MOO (een soort MUD), maar daarbij kun je in strings codes als [blue] en [bold] en [red] en [bg_green] etc etc opnemen, die door de server worden omgezet in de ANSI-escape reeksen. Dat is natuurlijk ideaal, en ik vond dat ik dat ook moest hebben.
Dus heb ik een kleine Perl-module geschreven die zulk soort codes ook kan omzetten. Dat is echt heel handig programmeren (als je ten minste graag kleuren zoals ik
Goed, ik ga dus eerst even proberen met die library en kijken wat dat oplevert, het resultaat post ik hier wel.
Komt mij net opeens nog een vraag te boven (is dat goed Nederlands?)... zijn er geen andere (gratis!) command-shells in plaats van / naast cmd.exe die wel ANSI-kleuren ondersteunen?
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Overigens - muds worden toch meestal via telnet gespeeld of vergis ik me nu heel erg? In hoeverre is een lokale interpretatie van ANSi dan echt belangrijk ?
[ Voor 21% gewijzigd door elevator op 08-10-2003 01:06 ]
Hoe dan ook, ik ben dus bezig geweest met Win32::Console, en dat heeft 1 voordeel (je ziet de letterlijke escape-reeks niet meer!) en 1 nadeel (je ziet ook geen kleuren

Heb voor de zekerheid even gecontroleerd of $FG_GREEN en $BG_YELLOW wel iets waren, en zo te zien dus wel. Ik kom langzaam dichterbij, maar nog niet genoeg.
Terwijl ik wacht op misschien nieuwe tips/informatie/..., ga ik het internet afschuimen naar alternatieven voor cmd.exe
In elk geval, tot zover bedankt!
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Ff proberen dusFor example, to highlight the prompt in MS-DOS command prompt, you must add "dosonly" to your CONFIG.NT file, and run COMMAND (not CMD) from MS-DOS Command Prompt. You can then run a batch file that includes the PROMPT command with ANSI escape sequences to highlight the prompt.
.EDIT: Laat maar, ik zit niet op te letten. Met dit commando maak je o.a. perl.exe volledig onbereikbaar vanuit command.com, omdat dat een 32bit prog is... hoo
[ Voor 23% gewijzigd door muba op 08-10-2003 01:52 ]
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Ik heb een mooie work-around gevonden!
Vanuit cmd.exe kan je (natuurlijk!) command.com aanroepen. En dan werkt alles wel goed.
Vanuit cmd.exe een batch aanroepen met als inhoud 'command /c echo dingetjes in {ESC}[32mkleur!' werkt wel.
Dus ik ga mn perl-script dusdanig ombouwen dat prints waar ansi bij komt kijken, via command.coms echo gaan. Waarschijnlijk geen nette of mooie oplossing, maar ik krijg wat ik hebben wil: KLEUR!
Heel erg bedankt, elevator. Je hebt me heel erg in de goede richting gestuurd, en ik weet niet of ik er anders zo snel achter gekomen zou zijn. Tof!
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Ik schrijf zelf ook wel eens een applicatie die via telnet gebruikt wordt, en om dan op de telnet client ANSI kleuren te zien te krijgen, moet ik ruwe ANSI codes sturen. Pas als ik lokaal ook kleurtjes wil weergeven (eg: een operator moet kunnen 'mee kijken' op een game), heb ik lokaal een ANSi interpreter nodig.
Misschien dat ik je verkeerd begrijp hoor
In een MOO kunnen de spelers zelf ook dingen maken en daar beschrijvingen bij maken of bepaalde kleine programmaatjes (verbs) om het geheel samen te laten werken.
In deze beschrijvingen of verbs kun je ANSI-reeksen ({ESC}[32m bijv) opnemen, zodat je in die descriptions of verbs kleuren kan opnemen.
Niet iedereen kent natuurlijk al die numerieke codes uit zijn hoofd, en daarnaast is het in Windows best moeilijk geworden om het ESCAPE-karakter uit je toetsenbord te krijgen om het naar de server (waar de verbs worden opgeslagen) te sturen.
Daarom is er een soort parser bedacht, die gebruik maakt van codes als [blue] en [green] en [bold] en [bg_white] etc, zodat makers van descriptions en verbs die kunnen gebruiken in plaats van de echte ANSI-reeksen.
Deze parser wordt aangeroepen vanuit dat gedeelte van de server dat de data naar de verbonden spelers stuurt, dus de woordcodes ([green]) worden omgezet naar ANSI-reeksen ({ESC}[32m), zodat de mensen thuis gewoon kleurtjes op hun scherm zien.
Nu programmeer ik niet alleen in MOO's, maar ook graag voor mezelf en vaak maak ik dan text-only applicaties, meestal in Perl.
Ik vond/vindt die MOO-woordcodes voor ANSI-reeksen wel erg handig, dus toen dacht ik: hee, dat wil ik ook hebben in mijn Perl-bouwsels. Dus toen ben ik een soortgelijke parser gaan maken voor Perl. En dat werkt. Maar niet zomaar onder XP
Ik hoop dat je het snapt?
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
Ik was even nieuwsgierig
Maargoed, in principe mag dit topic nu *wel* dicht
Nogmaals bedankt!
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea