99 бутылок: C--, WSH
13. Windows Script Host — технология, заботливо упрятанная в недра вашей Windows заботливой компанией Microsoft. Скрипт написан с применением второй версии технологии, которая распространяется вместе с Windows 2000. Впрочем, ничего не мешает поставить его на любую другую ОС этого семейства. Базируется она на JScript или VBScript и позиционируется как замена пакетному (batch) языку DOS.
Способ запуска: wscript.exe beer.js. Во время выполнения настоятельно не рекомендуется переключать окна.
Скрипт, выводящий песню о пиве (beer.js).
function PrintBeer(i)
{
return (i?i:"No")+" bottle"+(i-1?'s':'')+" of beer"
}
WshShell = WScript.CreateObject("WScript.Shell")
with (WshShell)
{
Run("notepad.exe")
WScript.Sleep(100)
AppActivate("Untitled - Notepad")
for (i = 99; i>0;)
{
SendKeys (PrintBeer (i)+" of beer on the wall, ")
SendKeys (PrintBeer (i)+".~")
SendKeys ("Take one and pass it around,~")
i--
SendKeys (PrintBeer (i)+" on the wall.~~")
}
SendKeys ("No more bottles of beer...~")
SendKeys ("Go to the store and buy some more...~")
SendKeys ("99 bottles of beer.")
}
12. Sphinx C--. Есть язык Си, есть Си++, а есть, оказывается, Си--. Язык, занимающий промежуточное положение между Си и ассемблером. Его автором является Peter Cellik (Канада), в данный момент поддержкой и расширением синтаксиса языка занимается Михаил Шекер (Россия).
Язык мне показался обычным ассемблером, с внедрёнными элементами синтаксиса Си. Этакий навороченный макроассемблер. Попался бы мне такой лет так пять назад — оторвал бы с руками, а сейчас… Но, хотя на ассемблере теперь я пишу только мелочь, а мелочь лучше писать без применения всяческих прилад, стирать все же не буду — вдруг пригодится.
P.S. Кстати, на страничке языка можно скачать архиватор HA, переписанный на Си--. Работать он после такой модификации стал в полтора раза быстрее. Заслуга языка и компилятора или автора модификации?
Программа, выводящая песню о пиве.
?use80486
?include "WRITE.h--"
void PRINTBEER ()
{
$PUSH AX;
IF (AX) WRITEWORD (AX); ELSE WRITESTR ("No");
WRITESTR (" bottle");
$POP AX;
IF (AX<>1) WRITE ('s');
WRITESTR (" of beer");
}
void main()
byte bott;
byte beer = 99;
{
WHILE (beer)
{
PRINTBEER (beer);
WRITESTR (" on the wall, ");
PRINTBEER (beer);
WRITESTR (".\nTake one and pass it around,\n");
beer--;
PRINTBEER (beer);
WRITESTR (" on the wall.\n\n");
};
WRITESTR ("No more bottles of beer...\n");
WRITESTR ("Go to the store and buy some more...\n");
WRITESTR ("99 bottles of beer.");
AX = 0x4C;
$INT 0x21;
}