Sources VFlash
15 sujets de 1 à 15 (sur un total de 24)
- 1
- 2
-
Pour ceux que ça intéresserait : https://github.com/zapek/VFlash
On trouve encore du flash sur le web
Pour ceux qui veulent tester VOYAGER ;
https://zapek.com/software/voyager/
Ca peut être utile par exemple pour regarder les milliards d’œuvres produites en flash, logiciels, jeux, animations, vidéos et surtout :
Ifeel.swf – Un film d’animation de commande en flash par
Melon DesignMelon Dezign pour les Beatles, et ceux qui gèrent leur droits exclusifs – (sony ?). (Année : 1999 ou 2000)
https://www.grosfichiers.com/y6TxbwkdFGz – ifeel.swf
MELON-different-web.swf : Melon Design (Année ?)
flash_Tenacious_D_Fuck_Her_Gently.swf – Une vidéo drôle assez connue à l’époque qu’on ne peut pas trouver sur youtube et qu’on ne peut de fait, pas lire facilement puisque flash est retiré par défaut.Les vieux softs trouvables sur aminet ne fonctionnent pas bien avec les swf.
Pour lire du .swf actuellement :
https://ruffle.rs/demo/Vite, un panneau solaire.
Hello Zapek ! Le développement de Voyager a repris sur 68K ? chouette ! (hé hé
Euh, non 🙂
J’avais sorti les sources en 2017 mais je crois que personne n’a réussi à le compiler. Les sources de VFlash traînaient par là alors je me suis dit que pourquoi pas les mettre quelque part, même si ça ne sert pas à grand chose, sauf pour les curieux. Il n’y a toujours pas de client Git pour Amiga, si ?
Je n’ai pas trouvé de client git sur amiga 68K, mais je crois ça éxiste sur ppc.
Deux raisons à cela, mais c’est à discuter.
Il semblerait qu’il y ait une difficulté à compiler directement les sources qui permettraient de le faire, pour une histoire de gestion des threads, du coup on retrouve sur 68k que des clients svn ou cvs, qui sont issus de la version msdos.
La gestion du SSL serait trop lourde pour un 68k, et visiblement c’est un truc important dans git.
Mais ça serait cool sinon, même si ça obligeait à passer par un petit boitier port // ou serial par exemple.
Pour une compilation, optimisation, amélioration des sources, il serait possible avec les outils disponibles actuellement de passer des morceaux problématiques de code dans un
cerveau de cylonréseau neuronal.… Le 68k manque de mises à jour, même si amigaOS 3.3 se profile à l’horizon.
En tout cas la version 3.3 de 2002 fonctionne toujours ! 🙂
https://postimg.cc/DSfNN6kkVite, un panneau solaire.
En tout cas la version 3.3 de 2002 fonctionne toujours ! 🙂
Je crois que la dernière pour 68K était la 3.3.125 la dernière en GPL est la 3.4.9.
Mais le gros problème (à part le HTML 5, CSS et JS mal supporté) c’est le SSL qui ne marche plus avec les serveurs actuels.
Mais le gros problème (à part le HTML 5, CSS et JS mal supporté) c’est le SSL
Oui, il faut sortir la caisse à outils pour implémenter les nouveaux js et css.
Il semble que amissl (5.12 ?) est mis à jour. C’est le retour d’IBrowse qui a d’ailleurs peut-être relancé son développement et aussi l’arrivée des nouveaux hardware puissants (vampire, piStorm, émulation…)
La version 3.3 126 – 2002 (registered, keyfile) de Voyager lit sans problèmes les gif récents. (Ca fait bizarre en passant de pas pouvoir sortir les fenêtres du cadre avec amigaOS3.9)
(Il y en a au moins un ici qui pourrait compiler des sources mais cela demande un peu de temps…)Vite, un panneau solaire.
Beaucoup de références à Morphos dans le code. There are 2 archives ? One with the "Classic Amiga" 68020+ build and another one with the PPC native MorphOS build et : It runs on 68k, coldfire and PPC..
En regardant les sources (l’url plus haut contient les sources de Voyager), on peut voir cette portion de code dans http.c :
#if USE_SSL if( un->ssl == 1 && un->viaproxy ) { snprintf( buffer, sizeof(buffer), "CONNECT %s:%d HTTP/1.0\r\nUser-Agent: %s\r\n", un->purl.host, un->purl.port, vuseragent ); bp = strchr( buffer, 0 ); if( useproxyauth ) { strcpy( bp, "Proxy-Authorization: Basic " ); strcat( bp, proxyauth ); strcat( bp, "\r\n" ); bp = strchr( bp, 0 ); } strcpy( bp, "\r\n" ); un->ssl = 2; un->viaproxy = 0; } else if( un->ssl && !un->sslh ) { un->protocolstate = HTTP_DO_SSL_HANDSHAKE; // do SSL handshaking first DL( DEBUG_INFO, db_http, bug( "redoing for SSL handshake\n" )); return; } else #endif /* USE_SSL */
http://aminet.net/package/util/libs/AmiSSL-5.16-SDK
http://aminet.net/package/util/libs/AmiSSL-5.16-OS3Il ne doit pas falloir beaucoup de choses à un connaisseur du C pour adapter amissl et les normes modernes (TLS) à Voyager 3.x.
Il y a des références à miami_ssl.h dans network.h aussi (A l'époque, Miami et son module ssl était omiprésent sur les amiga 68k connectés, il était plus simple que amiTCP, avant l'arrivée de Genesis)
Le contenu de vssl.h :
/************************************************************************** ======================= The Voyager Web Browser ======================= Copyright (C) 1995-2001 by Oliver Wagner <[email protected]> All Rights Reserved Parts Copyright (C) by David Gerber <[email protected]> Jon Bright <[email protected]> Matt Sealey <[email protected]> **************************************************************************/ #ifndef VOYAGER_VSSL_H #define VOYAGER_VSSL_H struct VSSL_CacheInfo { int sess_number; int sess_connect; int sess_connect_good; int sess_accept; int sess_accept_good; int sess_hits; int sess_cb_hits; int sess_misses; int sess_timeouts; }; #if ( !defined(__GNUC__) && !defined(__DCC__) ) #pragma libcall VSSLBase VSSL_Id 1e 0 #pragma libcall VSSLBase VSSL_Create_CTX 24 0 #pragma libcall VSSLBase VSSL_Free_CTX 2a 801 #pragma libcall VSSLBase VSSL_Connect 30 0802 #pragma libcall VSSLBase VSSL_Close 36 801 #pragma libcall VSSLBase VSSL_GetCipher 3c 801 #pragma libcall VSSLBase VSSL_Write 42 09803 #pragma libcall VSSLBase VSSL_Read 48 09803 #pragma libcall VSSLBase VSSL_SetTCPMode 4e 8002 /* V2*/ #pragma libcall VSSLBase VSSL_GetPeerCertificate 54 801 #pragma libcall VSSLBase VSSL_AddCertDir 5a 9802 #pragma libcall VSSLBase VSSL_X509_Free 60 801 #pragma libcall VSSLBase VSSL_X509_NameOneline 66 801 #pragma libcall VSSLBase VSSL_X509_FreeNameOneline 6c 801 #pragma libcall VSSLBase VSSL_X509_get_subject_name 72 801 #pragma libcall VSSLBase VSSL_X509_get_issuer_name 78 801 #pragma libcall VSSLBase VSSL_X509_get_notBefore 7e 801 #pragma libcall VSSLBase VSSL_X509_get_notAfter 84 801 #pragma libcall VSSLBase VSSL_GetVerifyResult 8a 9802 #pragma libcall VSSLBase VSSL_WriteCertPEM 90 9802 #pragma libcall VSSLBase VSSL_ReadCertPEM 96 801 #pragma libcall VSSLBase VSSL_ReadCertASN1 9c 801 #pragma libcall VSSLBase VSSL_ASN1_UTCTIME_sprint a2 9802 #pragma libcall VSSLBase VSSL_X509_NameHash a8 801 #pragma libcall VSSLBase VSSL_X509_HaveSubjectCert ae 9802 /* V3*/ #pragma libcall VSSLBase VSSL_X509_fingerprint b4 9802 #pragma libcall VSSLBase VSSL_X509_serialnumber ba 9802 #pragma libcall VSSLBase VSSL_SetRandSeed c0 0802 /* V6*/ #pragma libcall VSSLBase VSSL_GetStats c6 9802 #pragma libcall VSSLBase VSSL_CTX_Set_Options cc 0802 #pragma libcall VSSLBase VSSL_GetVersion d2 801 /* V8*/ #pragma libcall VSSLBase VSSL_SetDefaultOptions d8 001 #endif #ifdef MBX #define VSSLBASE void *dummy #define VSSLVAR NULL #else #define VSSLBASE struct Library *VSSLBase #define VSSLVAR VSSLBase #endif typedef void *X509; typedef void *ASN1_UTCTIME; typedef void *X509_NAME; char *VSSL_Id( void ); APTR VSSL_Create_CTX( void ); void VSSL_Free_CTX( APTR ctx ); APTR VSSL_Connect( APTR ctx, int sock ); void VSSL_Close( APTR ssl ); char *VSSL_GetCipher( APTR ssl ); int VSSL_Write( APTR ssl, APTR buff, int len ); int VSSL_Read( APTR ssl, APTR buff, int len ); void VSSL_SetTCPMode( int mode, APTR ); void VSSL_AddCertDir( APTR ctx, STRPTR dir ); int VSSL_GetVerifyResult( APTR ssl, char **errorp ); X509 *VSSL_GetPeerCertificate( APTR ssl ); void VSSL_X509_Free( X509 *cert ); STRPTR VSSL_X509_NameOneline( X509_NAME *name ); void VSSL_X509_FreeNameOneline( STRPTR name ); X509_NAME * VSSL_X509_get_subject_name( X509 *cert ); X509_NAME * VSSL_X509_get_issuer_name( X509 *cert ); ASN1_UTCTIME * VSSL_X509_get_notBefore( X509 *cert ); ASN1_UTCTIME * VSSL_X509_get_notAfter( X509 *cert ); int VSSL_WriteCertPEM( X509 *cert, STRPTR outfile ); X509 *VSSL_ReadCertPEM( STRPTR filename ); X509 *VSSL_ReadCertASN1( STRPTR filename ); void VSSL_ASN1_UTCTIME_sprint( char *to, ASN1_UTCTIME *tm ); ULONG VSSL_X509_NameHash( X509 *cert ); int VSSL_X509_HaveSubjectCert( APTR ctx, X509 *cert ); int VSSL_X509_fingerprint( X509 *cert, char *to ); void VSSL_X509_serialnumber( X509 *cert, char *to ); void VSSL_SetRandSeed( APTR buff, int len ); void VSSL_GetStats( APTR ctx, struct VSSL_CacheInfo *ci ); void VSSL_CTX_Set_Options( APTR ctx, ULONG options ); STRPTR VSSL_GetVersion( APTR ssl ); void VSSL_SetDefaultOptions( ULONG options ); #define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L #define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L #define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L #define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L #define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L #define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x00000040L #define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L #define SSL_OP_TLS_D5_BUG 0x00000100L #define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L #define SSL_OP_TLS_ROLLBACK_BUG 0x00000400L /* If set, only use tmp_dh parameters once */ #define SSL_OP_SINGLE_DH_USE 0x00100000L /* Set to also use the tmp_rsa key when doing RSA operations. */ #define SSL_OP_EPHEMERAL_RSA 0x00200000L /* The next flag deliberatly changes the ciphertest, this is a check * for the PKCS#1 attack */ #define SSL_OP_PKCS1_CHECK_1 0x08000000L #define SSL_OP_PKCS1_CHECK_2 0x10000000L #define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L #define SSL_OP_NON_EXPORT_FIRST 0x40000000L #define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x80000000L #define SSL_OP_ALL 0x000FFFFFL #define SSL_OP_NO_SSLv2 0x01000000L #define SSL_OP_NO_SSLv3 0x02000000L #define SSL_OP_NO_TLSv1 0x04000000L #endif /* VOYAGER_VSSL_H */
Dossier vsslstubs contenant : vssl.c bss_sock_mbx.c
Lien vers un voyager compilé pour 68k.
**********************************************
Au passage REP Oliver Wagner !
**********************************************Un début de réécriture possible de vssl.h (Evidemment, il faut ajuster car sorti du contexte, ça risque de poser des petits problèmes)
/************************************************************************** ======================= The Modernization of Voyager Web Browser ======================= No_Copyright (C) 2024 by Void [Void Durant] <[email protected]> No Rights Reserved **************************************************************************/ #ifndef VOYAGER_VSSL_H #define VOYAGER_VSSL_H // includes à déplacer, modifier ... #include <exec/types.h> // Pour les types de base AmigaOS #include <proto/amissl.h> // Inclure le prototype de la bibliothèque AmiSSL ... #include <amissl/ssl.h> // Utilisation de la bibliothèque amissl ou OpenSSL moderne ?? #include <amissl/err.h> // Pour la gestion des erreurs ?? // Structure pour stocker les informations de cache SSL struct VSSL_CacheInfo { int sess_number; int sess_connect; int sess_connect_good; int sess_accept; int sess_accept_good; int sess_hits; int sess_cb_hits; int sess_misses; int sess_timeouts; }; // Déclarations des fonctions de la bibliothèque VSSL #if ( !defined(__GNUC__) && !defined(__DCC__) ) #pragma libcall VSSLBase VSSL_Id 1e 0 #pragma libcall VSSLBase VSSL_Create_CTX 24 0 #pragma libcall VSSLBase VSSL_Free_CTX 2a 801 #pragma libcall VSSLBase VSSL_Connect 30 0802 #pragma libcall VSSLBase VSSL_Close 36 801 #pragma libcall VSSLBase VSSL_GetCipher 3c 801 #pragma libcall VSSLBase VSSL_Write 42 09803 #pragma libcall VSSLBase VSSL_Read 48 09803 #pragma libcall VSSLBase VSSL_SetTCPMode 4e 8002 #pragma libcall VSSLBase VSSL_GetPeerCertificate 54 801 #pragma libcall VSSLBase VSSL_AddCertDir 5a 9802 #pragma libcall VSSLBase VSSL_X509_Free 60 801 #pragma libcall VSSLBase VSSL_X509_NameOneline 66 801 #pragma libcall VSSLBase VSSL_X509_FreeNameOneline 6c 801 #pragma libcall VSSLBase VSSL_X509_get_subject_name 72 801 #pragma libcall VSSLBase VSSL_X509_get_issuer_name 78 801 #pragma libcall VSSLBase VSSL_X509_get_notBefore 7e 801 #pragma libcall VSSLBase VSSL_X509_get_notAfter 84 801 #pragma libcall VSSLBase VSSL_GetVerifyResult 8a 9802 #pragma libcall VSSLBase VSSL_WriteCertPEM 90 9802 #pragma libcall VSSLBase VSSL_ReadCertPEM 96 801 #pragma libcall VSSLBase VSSL_ReadCertASN1 9c 801 #pragma libcall VSSLBase VSSL_ASN1_UTCTIME_sprint a2 9802 #pragma libcall VSSLBase VSSL_X509_NameHash a8 801 #pragma libcall VSSLBase VSSL_X509_HaveSubjectCert ae 9802 #pragma libcall VSSLBase VSSL_X509_fingerprint b4 9802 #pragma libcall VSSLBase VSSL_X509_serialnumber ba 9802 #pragma libcall VSSLBase VSSL_SetRandSeed c0 0802 #pragma libcall VSSLBase VSSL_GetStats c6 9802 #pragma libcall VSSLBase VSSL_CTX_Set_Options cc 0802 #pragma libcall VSSLBase VSSL_GetVersion d2 801 #pragma libcall VSSLBase VSSL_SetDefaultOptions d8 001 #endif #ifdef MBX #define VSSLBASE void *dummy #define VSSLVAR NULL #else #define VSSLBASE struct Library *VSSLBase #define VSSLVAR VSSLBase #endif // Déclarations de types pour les certificats typedef void *X509; typedef void *ASN1_UTCTIME; typedef void *X509_NAME; // Prototypes des fonctions char *VSSL_Id(void); APTR VSSL_Create_CTX(void); void VSSL_Free_CTX(APTR ctx); APTR VSSL_Connect(APTR ctx, int sock); void VSSL_Close(APTR ssl); char *VSSL_GetCipher(APTR ssl); int VSSL_Write(APTR ssl, APTR buff, int len); int VSSL_Read(APTR ssl, APTR buff, int len); void VSSL_SetTCPMode(int mode, APTR); void VSSL_AddCertDir(APTR ctx, STRPTR dir); int VSSL_GetVerifyResult(APTR ssl, char **errorp); X509 *VSSL_GetPeerCertificate(APTR ssl); void VSSL_X509_Free(X509 *cert); STRPTR VSSL_X509_NameOneline(X509_NAME *name); void VSSL_X509_FreeNameOneline(STRPTR name); X509_NAME *VSSL_X509_get_subject_name(X509 *cert); X509_NAME *VSSL_X509_get_issuer_name(X509 *cert); ASN1_UTCTIME *VSSL_X509_get_notBefore(X509 *cert); ASN1_UTCTIME *VSSL_X509_get_notAfter(X509 *cert); int VSSL_WriteCertPEM(X509 *cert, STRPTR outfile); X509 *VSSL_ReadCertPEM(STRPTR filename); X509 *VSSL_ReadCertASN1(STRPTR filename); void VSSL_ASN1_UTCTIME_sprint(char *to, ASN1_UTCTIME *tm); ULONG VSSL_X509_NameHash(X509 *cert); int VSSL_X509_HaveSubjectCert(APTR ctx, X509 *cert); int VSSL_X509_fingerprint(X509 *cert, char *to); void VSSL_X509_serialnumber(X509 *cert, char *to); void VSSL_SetRandSeed(APTR buff, int len); void VSSL_GetStats(APTR ctx, struct VSSL_CacheInfo *ci); void VSSL_CTX_Set_Options(APTR ctx, ULONG options); STRPTR VSSL_GetVersion(APTR ssl); void VSSL_SetDefaultOptions(ULONG options); // Options SSL #define SSL_OP_MICROSOFT_SESS_ID_BUG 0x00000001L #define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x00000002L #define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x00000008L #define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x00000010L #define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x00000020L #define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x00000040L #define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x00000080L #define SSL_OP_TLS_D5_BUG 0x00000100L #define SSL_OP_TLS_BLOCK_PADDING_BUG 0x00000200L #define SSL_OP_TLS_ROLLBACK_BUG 0x00000400L #define SSL_OP_SINGLE_DH_USE 0x00100000L #define SSL_OP_EPHEMERAL_RSA 0x00200000L #define SSL_OP_PKCS1_CHECK_1 0x08000000L #define SSL_OP_PKCS1_CHECK_2 0x10000000L #define SSL_OP_NETSCAPE_CA_DN_BUG 0x20000000L #define SSL_OP_NON_EXPORT_FIRST 0x40000000L #define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x80000000L #define SSL_OP_ALL 0x000FFFFFL #define SSL_OP_NO_SSLv2 0x01000000L #define SSL_OP_NO_SSLv3 0x02000000L #define SSL_OP_NO_TLSv1 0x04000000L #endif /* VOYAGER_VSSL_H */ Et une partie 'modernisée' dans http.c :
/*
* Builds up and sends the HTTP request.
*/
static void un_doprotocol_http_req(struct unode *un)
{
char buffer[8192]; // Taille fixe, mais à gérer avec précaution
char *bp;
int len;
int formlen = 0;
char *formdata = NULL; // Initialisé à NULL pour éviter les avertissements// Assemble the initial request
/*
* If we’re doing SSL-proxying, we need to
* « CONNECT » first.
*/#if USE_SSL
if (un->ssl == 1 && un->viaproxy)
{
// Utilisation de snprintf pour éviter les débordements de tampon
len = snprintf(buffer, sizeof(buffer), « CONNECT %s:%d HTTP/1.1\r\nUser-Agent: %s\r\n »,
un->purl.host, un->purl.port, vuseragent);if (len < 0 || len >= sizeof(buffer)) {
// Gestion d’erreur si le formatage échoue ou déborde
fprintf(stderr, « Error formatting CONNECT request\n »);
return;
}bp = buffer + len; // Pointer à la fin de la chaîne formatée
if (useproxyauth)
{
// Vérification de la taille pour éviter les débordements
len = snprintf(bp, sizeof(buffer) – (bp – buffer), « Proxy-Authorization: Basic %s\r\n », proxyauth);
if (len < 0 || len >= (sizeof(buffer) – (bp – buffer))) {
fprintf(stderr, « Error formatting Proxy-Authorization header\n »);
return;
}
bp += len; // Avancer le pointeur
}// Terminer la requête
snprintf(bp, sizeof(buffer) – (bp – buffer), « \r\n »);
un->ssl = 2; // Indiquer que la connexion SSL a été initiée
un->viaproxy = 0; // Désactiver l’utilisation du proxy
}
else if (un->ssl && !un->sslh)
{
un->protocolstate = HTTP_DO_SSL_HANDSHAKE; // Effectuer le handshake SSL
DL(DEBUG_INFO, db_http, bug(« Redoing for SSL handshake\n »));
return;
}
#endif /* USE_SSL */
}`On peut traiter méthodiquement tous les fichiers des sources de Voyager, les afiner (par exemple : vssl.c, network.h adapté à amissl) puis compiler et ensuite passer à javascript et css.
Vite, un panneau solaire.
@Sethghost: fais une PR/Branche directement sur Github plutôt que de copier/coller du code ici ?
Fais une PR/Branche directement sur Github plutôt que de copier/coller du code ici ?
Bonne idée !
Le fait de coller du code d’exemple dans l’interface wordpress d’amigaimpact qui n’est pas très pratique ni conçue pour ça est une manière de signifier qu’on pourrait relancer un projet collectivement 🙂 2 ou 3 personnes suffisent pour commencer et ça peut aller vite.
Relancer un projet aussi vaste que Voyager à l’échelle de l’amiga nécessite une bonne connaissance du logiciel, du compilateur SAS/C, des normes en vigueur actuellement, des 68000, du ppc, du sdk MUI pour la suite.
Premier petit problème, les sources semblent être hybrides, compilables sous MOS et 68k, or dans la doc, il y a 2 archives pour l’une ou l’autre machine.
Edit : Dans l’interface d’amigaimpact, il faudrait pouvoir
[spoilers]masquer le code source[/spoilers]Vite, un panneau solaire.
J’ai tenté d’installer un cross compilo MorphOS sur mac, mais ça déconne pendant le build. Ca fait tellement longtemps que j’avais pas touché à ça. J’ai trouvé que ça qui date de 5-7 (!) ans. Peut être qu’il y aurait plus récent qui marcherait ?
Salut,
Tous les navigateurs fonctionne encore sur Amiga et en plus avec un Pistorm (par exemple 😉 ) c’est presque rapide.
Bien sur ils sont tous obsolète au niveau du JS, CSS et HTML !Pour le SSL effectivement AmiSSL est souvent mis à jour et des logiciels comme RNOXFTP l’utilise et cela fonctionne très bien.
Je veux bien mettre les sources de Voyager sur GitHub (et les trucs qui manquent) si ça peut aider.
Au moins cela ferais une sauvegarde des sources pour l’histoire 😉
Mettre a jour un des navigateurs Amiga me semble un énorme boulot comme le dit @Sethghost il faut des connaissances sur beaucoup de sujet…
Quand tu voie le merdier que tu peut faire avec du CSS !!!!https://youtube.com/@stephbb75
15 sujets de 1 à 15 (sur un total de 24)
- 1
- 2
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Sources VFlash