Jó volt, szép volt.
2005 5+5k PHP 5 compo
PHP C64 Emulator
- elkövette:
- Magyar Attila Mihály
- tesztfok:
- A szerveren érvényben levő erőforrás-korlátozás miatt csak otthon tudod kipróbálni! (összes contrib letöltése)
- licenc:
- ismeretlen
Leírás
PHP-C64 (2005 PHP Konferencia - 5k Compo) ========================================= Keszitette: Magyar Attila Mihaly Email: mogyi925_kukac_inf_elte_hu Web: mogyi925.uw.hu mogyi925.uw.hu/phpc64 Meret: PHP: 5104 byte Egyeb: 5075 byte Bongeszok: Windows 98 SE: Mozilla 1.5. (Mozilla/5.0.) - ajanlott Internet Explorer 6.0.2800. Opera 7.23. Linux: Epiphany 1.4.4 Mozilla Firefox 1.0 Opera 7.54 Konqueror 3.3.1-4.3 A Compo file-jai: c.php - a C64 "lelke" - 5104 + 3896 byte index.html - kezdolap - 0 + 528 byte z.t - adatfile - 0 + 288 byte k.js - billentyukezeles - 0 + 188 byte k.htm - kek keret - 0 + 42 byte b.htm - fekete hatter - 0 + 40 byte k.gif - kurzor - 0 + 93 byte Osszesen: 5104 + 5075 byte Egyeb file-ok: readme.txt - leiras A kezelesrol roviden A programrol Parancsok BASIC Peldak Hibak A kezelesrol roviden (a C64-et ismeroknek) -------------------- A programot nagyjabol ugyanugy kezelhetjuk, mint egy C64-es gepet (lsd: lentebb), a kovetkezo elteresekkel: az INS/DEL (PC: Backspace) billentyu helyett a "_" karaktert kell hasznalni NE HASZNALJUK A Backspace billentyut! (Nehany bongeszo "Vissza" gombjanak ugyanis ez a billentyuparancsa.) a RUNSTOP (PC: Break) billentyu helyett a "\" karakter mukodik BASIC program 1 soraban egy utasitas allhat (a ":" nem mukodik) az IF-THEN szerkezet eseten a THEN-t valamelyik sor szama koveti (utasitas nem allhat utana) nem hasznalhatok tombok (a 2. pelda mutat egy megoldast ennek athidalasara) 2 valtozotipus van: string ($), real (%) STEP-et nem ismeri max 1 betus valtozonevek a BASIC utasitasokat csak programfutas kozben fogadja el. a c.php-nek tudnia kell irni a p nevu directory-t. A programrol ------------ Bar meg eleg fiatal vagyok, meg eppen belefertem abba a korba, mikor az ember elso szamitogepe egy imadott Commodore 64-es volt. Eleinte, mint mindenki, csak jatszottam vele, aztan a kezembe akadt egy konyv, ami a BASIC nyelvrol szolt. Azota az idom nagy reszet a szamitogep, de legfokepp a programozas teszi ki, bar mind a gepek, mind a programnyelvek nagyon megvaltoztak azota. Ugy erzem, a programozashoz szukseges alapveto gondolkodast egy gyerek, aki erdeklodik a szamitogepek irant, ugy sajatithatja el legkonnyebben, ahogy sok mai programozo is tette annak idejen: eloszor a BASIC, utana a Pascal, vegul egy magasabb szintu, objektum-orientalt nyelvvel megismerkedve (az Assemblyrol mar nem is beszelve :-) ). Ezert aztan elhataroztam, hogy az idei Compo-ra egy Commodore 64-es butitott masolatat keszitem el, ami nagyjabol sikerult is (marmint eleg buta lett :-) ). Parancsok --------- A C64-bol csak a legszuksegesebb parancsokat vettem at, a meretkorlat miatt. Ezek a kovetkezok: NEW torli a tarbol az eppen bent levo BASIC programot RUN elinditja a tarban levo BASIC programot a futas a RUNSTOP ("\") billentyu segitsegevel barmikor megszakithato. LIST kepernyore irja a tarban levo program forraskodjat LIST X az X szamu sort irja ki LIST X-Y az X es Y kozotti sorokat irja ki ha valamelyiket elhagyjuk, az elhagyott resz helyett a program elso vagy utolso sorat tekinti SAVE "programnev" programnev nevu file-ba menti a tarban levo programot, LOAD "programnev" betolti a tarba a programnev nevu programot (a bent levot felulirja) BASIC ----- A BASIC nyelvben (C64-en) minden sort egy szam azonosit. Az elagazasok kivetelevel a sorokat novekvo sorrendben hajtja vegre a gep. Egy BASIC sor a kovetkezokeppen nez ki (pl): 10 utasitas Erdemes a sorokat tizesevel szamozni, igy kesobb konnyeb beszurhatunk uj sorokat. A begepeles sorrendje tetszoleges. Ha egy sort torolni szeretnenk, irjuk be a szamat, majd nyomjunk RETURN-t (Enter-t). Egy BASIC sor hossza max. 255 karakter lehet. Utasitasok PRINT "szoveg" kepernyore iras IF feltetel THEN szam Ha a feltetel teljesul, a szam szamu sorral folytatodik a program, egyebkent a kovetkezo sorral Pelda: IF 3>2 THEN 30 IF "ABC"="ABC" THEN 30 IF 4<=8/2 THEN 30 IF "A"<>"B" THEN 30 (az utolso sorban a <> jelentese: nem egyenlo) Ket feltetelt egymasba is agyazhatunk, az AND es az OR operatorokkal: IF "ABC"="CBA" OR 5<6 THEN 20 GOTO szam a szam szamu sorral folytatodik a program GOSUB szam ... RETURN a szam szamu sorral folytatodik a program futasa, viszont ha RETURN utasitast talal, akkor "visszater", es a kovetkezo sorral folytatodik END kilep a programbol FOR ... TO ... NEXT szamlalo ciklus, pl: 10 FOR I%=1 TO 10 20 PRINT "C64" 30 NEXT I% a fenti program 10-szer kiirja a kepernyore a C64 szoveget (I% - lasd: valtozok) nem szukseges kiirni a NEXT utan a ciklusvaltozot, de ajanlott (foleg egymasba agyazasnal) REM a sor tovabbi resze megjegyzes GET A$ az A$ valtozoba 1 karaktert olvas be a billentyuzetrol ha nem nyomunk le billentyut, akkor A$ ures marad, egyebkent a karaktert a billentyuzet-pufferbol veszi INPUT S$ az S$ valtozoba szoveget olvas be a billentyuzetrol, es a bevitel ideje alatt megallitja a programot a bevitel RETURN-nel (Enter) er veget Valtozok A valtozokat nevuk azonositja, ami 1 angol betu lehet. A nev betuje utan a tipus-azonositonak kell kovetkeznie. Ket tipusu erteket kulonboztetunk meg: szoveg (string) mindig "-jelek koze zarjuk. string tipusu valtozokat a "$" karakter azonositja, pl: 10 INPUT A$ 20 IF A$="VEGE" THEN 1000 ... tovabbi programreszek 1000 END valos szam (real): a "%" karakter azonositja, pl: N%=-10.0576 Operatorok Ket ertek kozotti muveletek vegzesere alkalmasak: = ertekadas (a bal oldali operandus mindig valtozonev!) + osszeadas (real ertekek eseten, stringek eseten osszefuzes) - kivonas * szorzas / osztas Fuggvenyek Matematikai fuggvenyek ABS(X%) X% abszoluterteke COS(X%) X% koszinusza (X% radianban) EXP(X%) exponencialis fuggveny (e-alapu) LOG(X%) logaritmus fuggveny (e-alapu) SIN(X%) szinusz (radian) TAN(X%) tangens fuggveny (radian) ATN(X%) arcus tangens (az eredmeny radianban) RND(X%) X%-tol fuggetlenul egy 0 es 1 koze eso, veletlenszeruen eloallitott szam SGN(X%) elojelfuggveny (ha X%<0, erteke -1, X%=0-ra 0, egyebkent +1) SQR(X%) negyzetgyok-fuggveny INT(X%) X% egeszreszet adja String fuggvenyek ASC(S$) S$ elso karakterenek ASCII-kodja CHR(X%) az X% ASCII-kodu karakter VAL(S$) S$-bol szamot kepez LEN(S$) S$ karaktereinek szama MID(S$,X%,L%) S$ egy resz-stringje, ami az X% karaktertol kezdodik, es L% karakter hosszu STR(X%) X% szamot stringge alakitja Peldak ------ 1. Szamkitalalos jatek 10 PRINT "SZAMKITALALOS JATEK" 20 PRINT "TALALJA KI A 10000-99999 KOZTI SZAMOT!" 30 S$=STR(INT(RND(1)*90000)+10000) 31 FOR I%=1 TO 4 32 FORJ%=I%+1 TO 5 33 IF MID(S$,I%,1)=MID(S$,J%,1) THEN 30 34 NEXT J% 35 NEXT I% 36 P%=0 40 P%=P%+1 50 PRINT "TIPP:" 60 INPUT T$ 70 T$=MID(T$,1,5) 80 T$=MID("AAAAA",1,5-LEN(T$))+T$ 90 C%=0 95 E%=0 100 FOR I%=1 TO 5 110 K$=MID(T$,I%,1) 120 FOR J%=1 TO 5 130 IF K$=MID(S$,J%,1) THEN 150 140 GOTO 170 150 C%=C%+1 160 J%=5 170 NEXT J% 180 IF K$<>MID(S$,I%,1) THEN 200 190 E%=E%+1 200 NEXT I% 210 PRINT STR(C%)+" JEGY JO" 220 PRINT STR(E%)+" JEGY JO HELYEN" 230 IF E%=5 THEN 250 240 GOTO 40 250 PRINT STR(P%)+" TIPP." 260 PRINT"A SZAM "+S$ 270 PRINT"UJ SZAM?(I/N)" 280 GET U$ 290 IF U$="" THEN 280 300 IF ASC(U$)=43 THEN 10 310 PRINT "VISZLAT!" 2. ABC-rendezo 10 PRINT "ABC-RENDEZO" 20 PRINT "ELEMEK SZAMA" 30 INPUT N$ 40 IF STR(VAL(N$))<>N$ OR VAL(N$)<2 THEN 20 50 IF N$="0" THEN 999 60 N%=VAL(N$) 65 A$="" 70 FOR I%=1 TO N% 80 PRINT STR(I%)+".ELEM" 90 INPUT S$ 100 A$=A$+"*"+S$ 110 NEXT 120 PRINT "TURELEM" 130 FOR I%=1 TO N%-1 140 FOR J%=I%+1 TO N% 150 M%=I% 160 GOSUB 1000 170 E$=T$ 180 M%=J% 190 GOSUB 1000 200 F$=T$ 210 IF F$>=E$ THEN 300 230 R$=E$ 240 M%=J% 250 GOSUB 2000 260 M%=I% 270 R$=F$ 280 GOSUB 2000 300 NEXT J% 305 PRINT STR(INT(I%*100/N%))+"%" 310 NEXT I% 315 PRINT "KESZ:" 320 FOR I%=1 TO N% 330 M%=I% 340 GOSUB 1000 350 PRINT T$ 360 NEXT 999 END 1000 REM M% ELEMET T$-BE 1010 O%=0 1020 P%=0 1030 P%=P%+1 1040 IF MID(A$,P%,1)<>"*" AND P%<LEN(A$) THEN 1030 1050 O%=O%+1 1060 IF O%<M% THEN 1030 1070 T$="" 1080 P%=P%+1 1090 T$=T$+MID(A$,P%,1) 1100 IF MID(A$,P%,1)<>"*" AND P%<LEN(A$) THEN 1080 1110 IF MID(T$,LEN(T$),1)<>"*" THEN 1130 1120 T$=MID(T$,1,LEN(T$)-1) 1130 RETURN 2000 REM M% ELEM HELYETT R$ 2010 S$="" 2020 Q%=M% 2030 IF M%=1 THEN 2100 2040 FOR K%=1 TO Q%-1 2050 M%=K% 2060 GOSUB 1000 2070 S$=S$+"*"+T$ 2080 NEXT 2100 S$=S$+"*"+R$ 2110 IF Q%=N% THEN 2200 2120 FOR K%=Q%+1 TO N% 2130 M%=K% 2140 GOSUB 1000 2150 S$=S$+"*"+T$ 2160 NEXT 2200 A$=S$ 2210 RETURN Hibak ----- * a BASIC programok szintaktikai hibait (meretkorlat miatt) nem minden esetben talalja meg * az Internet Explorer a kb 700 byte-nal hosszabb programoktol "kiakad" * ha a c.php-t tartalmazo frame elobb toltodik be, mint ahogy letrejon az "s" nevu frame, javascript hibahoz vezet, ilyenkor ujra kell tolteni az oldalt (1-2 probalkozas utan mukodni fog), ritkan fordul elo a hiba Tippek ------ * Opera alatt megall a program az INPUT utasitasoknal, es nem megy tovabb RETURN-re (Enter); viszont ha atkattintunk egy masik fulre, majd vissza a C64-hez, utana mar mukodik a kovetkezo 1 db RETURN (a hiba Linux alatt jelentkezett) Magyar Attila Mihaly 2005. februar 23.