From nobody Fri Jan 21 13:27:39 2011 Path: nntp.anjou.terraraq.org.uk!nntp-feed.chiark.greenend.org.uk!ewrotcd!matrix.darkstorm.co.uk!weretis.net!feeder4.news.weretis.net!newsfeed.straub-nv.de!newsfeed.x-privat.org!feeder.news.tin.it!spool.news.tin.it!not-for-mail From: "io_x" Newsgroups: alt.lang.asm,comp.lang.c,comp.lang.c++ Subject: what is brainfuck? Date: Fri, 21 Jan 2011 12:47:26 +0100 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2900.2180 X-RFC2646: Format=Flowed; Original X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180 Lines: 121 Message-ID: <4d397247$0$2048$4fafbaef@reader1.news.tin.it> Organization: TIN.IT (http://www.tin.it) X-Comments: Please send technical notifications to newsmaster@tin.it NNTP-Posting-Host: 213.45.245.243 X-Trace: 1295610440 reader1.news.tin.it 2048 213.45.245.243:10609 X-Complaints-To: Please send abuse reports to abuse@retail.telecomitalia.it Xref: nntp.anjou.terraraq.org.uk alt.lang.asm:559 comp.lang.c:25398 comp.lang.c++:16197 questa volta parlo in italiano sono un poco rude questo sarebbe un linguaggio "brainfuck" ; u32 __stdcall SpedisciNomeEdopoFile(u32* socket, u32 iFinestraHandle, u8* StringNameFile) ; Anche se "StringNameFile" è un percorso, spedisce soltanto il nome finale del file. ; aspetta un secondo per permettere al client di aprire il file in scrittura, e lo spedisce. ; Se errori di parametro o non identif. ritorna 1 CF=1 ; Se il nome è troppo lungo ritorna 2 CF=1 ; Se il file non si apre ritorna 3 CF=1 ; Se la spedizione nome non riuscita ritorna 4 CF=1 ; Se qualcosa spedizione non ok ritorna 5 CF=1 ; se tutto ok ritorna 0 CF=0 ; USATI gli indirizzi per la finestra, ma anche la variabile random GLOBALE ; 0k,4j,8i,12b,16Ra, 20P_Socket, 24P_ifinestra, 32P_buf_string +2048 ; 2068 2072 2076 align 4 SpedisciNomeEdopoFile: non è criptata .1: PostMessage(i, &WM_COMMAND, 1036, "aspetta la scrittura del file" ) a^=a|c^=c ^16=2 ; 2== nome file troppo lungo .11: al=*b+c|a==0#.12|++c|c>200#.e44|#.11 .12: ^24=c ; in 24 la lunghezza della stringa in buf ^16=3|a=s|D*a="r"|Fopen_m(b,a)|jc .e1|^28=a k=&^101|EstraiNomeFinaleDalPath(k, 100, b)|jc .e4|a<0?#.e4|a>200#.e4 ^24=a ; in ^24 la lunghezza del nome del file da inviare --k ; punta a s+100 *k=al ; ove inserire la lunghezza della stringa da inviare all'inizio ^20=="C"!#.13 c=*PmemRndu|CriptArrRNDXorTable(k, 1, CrpTable, c) ; cripta la dimensione ++k|a=^24|c=*PmemRndu|CriptArrRNDXorTable(k, a, CrpTable, c) ; cripta il nome .13: ^4=0|j+=20|--k ; j indirizzo di socket out BloccaRisorsaSys(UsoSocket) ; spedisce il nome del file+\0 eventualmente criptato, tutto non bufferizzato ^16=4|r=s| Scrivi(j,r, k,1)|^4++=0|jnz .1z ; spedisce la dimensione ++k |r=s|c=^24|Scrivi(j,r, k,c)|^4++=0|jnz .1z ; spedisce il nome Sleep(1000) ; aspetta che il client apri il file e sia pronto per la ricezione ^16=5|r=^28|^20=="C"!#.14 ; spedisce il file c=*PmemRndu|CriptFileRNDXorTable(j, r, CrpTable, c)|^32=a|^4++=0|#.1z .14: CopiaFile(j,r)|^32=a|^4++=0 .1z: LiberaRisorsaSys(UsoSocket) ^4#.e5 ; errori di spedizione a=^28|Fclose_m(a)|jc .e6 ; in ^0 vi sono i bytes inviati del nome c=^0 |c+=^32 |++c|jz .e3 ; Spedisce Nbytes+1 perchè 0 non puo' essere spedito .2: PostMessage(i, &WM_COMMAND, MD_PSEUDO_BUTTON_BYTES_INVIATI, c ) PostMessage(i, &WM_COMMAND, 1036,"scrittura del file completata: tutto ok" ) .9: a^=a .z: s=&*s+2048 >b,i,j,k ret 12 ok potrebbe essere piena di errori, ok; potrebbe essere progettata male (probabilmente per spedire il file dovevo aprire un'altra porta diversa da quella della connessione principale) ma se io dovessi riscrivere nei vostri linguaggi, C C++, o plain-asm quello che fa questa routine, (condizioni di errore e preservare l'algoritmo) per me, al più, si potrebbe ottenere una routine 3x volte più lunga e 50x volte più difficile da leggere. oppure 3 routines della stessa linghezza ma 10 volte piu' difficili da leggere ciscuna. Sottolineo che questo significa che il linguaggio "brainfuck" non lo è oppure lo è assai meno dei linguaggi plain asm, C, C++. in altre parole sembra che l'estrema libertà di usare piccole [poche] istruzioni, e di disporle nella pagina ed di usare lo stack renda, tutto piu' semplice, perchè vengono buone idee l'una dopo l'altra Scusate se sono stato troppo duro-rude. Ciao Buona Giornata