Witam
Chciałbym zaprezentować mój drugi "atarowski" projekt związany z PHP, tym razem nieco większy niż kolorowanie składni.
Zainspirowany przykładem dely'a w innym wątku postanowiłem napisać bibliotekę dla PHP, pozwalającą na tworzenie kodu 6502 w tym języku. Nie jest to absolutnie żadne "PHP dla Atari", choćby ze względu na ograniczenia - o czym później.
Uprzedzając pytania: "a po cholerę takie coś?", odpowiem: a choćby po to. Informacje są oczywiście pobierane dynamicznie z Internetu - czy Atarynka coś takiego potrafi? ;) Źródło programu wygląda tak:
<?php
// do zamiany z UTF-8 na "bez pl"
$encje = array('ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ż', 'ź',
'Ą', 'Ć', 'Ę', 'Ł', 'Ń', 'Ó', 'Ś', 'Ż', 'Ź');
$litery = array('a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z',
'A', 'C', 'E', 'L', 'N', 'O', 'S', 'Z', 'Z');
require_once 'AtP.php';
$At = new AtP;
$At->_kolor(20);
$At->Poke(0x02c8,20);
$tekst = $At->inwersja("http://atari8.info");
$At->PrintE($tekst);
// pobiera wiadomości z atari8.info
$plik = file_get_contents("http://atari8.info/");
$plik = str_replace($encje,$litery,$plik);
$plik = str_replace("\n",'',$plik);
preg_match_all('/<a name="news(.*?)<tr>/',$plik,$wynik);
$i = 0;
foreach($wynik[0] as $news)
{
$i++;
if($i>3) break;
$tekst = preg_replace('/<(.*?)>/','',$news);
$At->PrintE($tekst);
}
$At->_getchar();
$At->_outchar(125);
$At->jmp_(0x000a);
$At->run();
?>
Użyte nazwy poleceń są tymczasowe, liczę na konstruktywne opinie odnośnie nazewnictwa: Action! czy może Basic?
W mojej bibliotece użyłem typu MIME application/atari. Prawdopodobnie większość z Was ma przypisany typ application/atari800win, dlatego pisząc program można to zmienić według własnego uznania (wywołując konstruktor obiektu z dodatkowym parametrem).
Tak samo jak w przypadku łączenia kodu PHP z Javascriptem, trzeba pamiętać że jedno wykonuje się po stronie serwera przed uruchomieniem programu, a drugie po stronie klienta, interaktywnie, w trakcie działania programu. Dlatego jeżeli zapiszemy uzyskany kod, to oczywiście niusy nie będą się automatycznie uaktualniać po kolejnych uruchomieniach.
Brakuje na razie możliwości uzyskania odpowiedzi zwrotnej od emulatora. Tutaj można by zastosować coś a la atarowski Ajax, przekazując informacje do jakiegoś urządzenia (może "R:"?) podpiętego "na zewnątrz" pod wysłanie żądania HTTP.
Na koniec chciałbym spytać, czy Waszym zdaniem taki pomysł ma w ogóle sens. Jeżeli projekt nie będzie miał "brania", to umrze śmiercią naturalną, choćby z braku rozwoju.
Pozdrawiam
PS. W zaprezentowanym kodzie tablica $encje powinna zawierać znaki w formacie &#xxx; tylko forum "poprawiło" ;)