321Fermer323
squalylLe 26/11/2004 à 14:46
Bon voila j'ai tenté ça, je le passe pas en source tant que je ne suis pas sûr.

// C Source File
// Created 26/11/2004; 13:42:07
// programme freeware créé par squalyl^2 pour envoyer une liste d'octets sur le link sans protocole
// contact: squalyl^2 sur le forum www.yAronet.com

#define COMMENT_STRING         "Utilitaire d'envoi de données low level en basic"
#define COMMENT_PROGRAM_NAME   "bSendCalc"
#define COMMENT_VERSION_STRING "0.1.0.0 test"
#define COMMENT_VERSION_NUMBER 0,1,0,0 /* major, minor, revision, subrevision */

#include <tigcclib.h>

//on sait jamais...
#ifndef FALSE
#define FALSE 0
#endif

#ifndef TRUE
#define TRUE ~FALSE
#endif

#define ARG_COUNT_ERROR -1
#define ARG_TYPE_ERROR -2
#define LINK_ERROR -3

//renvoie un nombre à tios en sortie de fonction
void return_tios(int i, char quit) {
	push_quantum(END_TAG);
	push_long_to_integer(i);
	if(quit) exit(0);
	return;
}

// Main Function
void _main(void)
{
	ESI ap;
	unsigned char *data;
	int count,i,realcount;
	
	if(ArgCount()!=1) {
		//si on ne donne pas UN arg (liste_données) on sort
		return_tios(ARG_COUNT_ERROR,TRUE);
	};
	//ici c'est bon on a un arg reste à savoir si c'est une liste
	InitArgPtr(ap);
	if(GetArgType(ap)!=LIST_TAG) {
		//si on donne pas une liste on sort
		return_tios(ARG_TYPE_ERROR,TRUE);
	}
	//ici c'est bon on a une liste
	//on regarde la liste
	ap--;
	//comptage des octets dans la liste
	count=RemainingArgCnt(ap);
	//allocation	
	data=malloc(count*sizeof(char));
	realcount=0;
	for(i=0;i<count;i++) {
		//pour chaque élément de la liste, regarde son type et ignore l'élément si ce n'est pas un entier positif
		if(GetArgType(ap)==POSINT_TAG) {
			realcount++;
			data[i]=GetIntArg(ap)%256; //modulo 256 on veut des octets %)
		}
		//on pourrait traiter éventuellement les chaines de caractères mais faudrait prévoir la taille dans un premier scan
	}
	//ici on a scanné tous les éléms de la liste et on les a stocké dans le buffer si possible
	
	//init du link
	OSLinkOpen();
	
	//envoi avec test de réussite
	if(!LIO_SendData((void*)data,realcount)) {
		//retour zéro, succès, renvoie le nb d'octets réellement envoyés.
		return_tios(realcount,FALSE);
	}
	else return_tios(LINK_ERROR,FALSE);
	//libération
	OSLinkClose();
	free(data);
	return;
}


MIN_AMS = 2 et valeur de retour active dans les options de programme

ca compile chez moi en 627 bytes, mais j'ai pas pu tester.

la réception est encore plus simple, je la ferai plus tard.