Syntaxe LangageC
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

Syntaxe LangageC



  1. #1
    pirlo21

    Syntaxe LangageC


    ------

    Bonsoir tout le monde,
    J'ai trouvé un programe où figure la ligne suivante:
    while(i", gpib_tx_buff[k])
    Imédiatement avant de compiler ce programme je l'ai relu et j'ai trouvé q'un ";" manquait et je l'ai ajouté.
    L'instruction est devenu:
    while(i", gpib_tx_buff[k]);
    mais je ne comprends pas cette instruction surtout le (i",...).
    donc si quelqu'un pourra m'expliquer la syntaxe, je lui serai vraiment reconnaissant.

    P.S:
    Lorsque je compile le programme je n'obtient aucune erreur (mon compilateur est un mikroC). d'autant plus le "k" mis en indice n'a jamais été initialisé. Cela est-il possible?

    -----

  2. #2
    Jack
    Modérateur

    Re : Syntaxe LangageC

    je ne vois pas la différence entre le 1er et le 2nd while.

    A+

  3. #3
    whoami

    Re : Syntaxe LangageC

    Bonjour,
    Citation Envoyé par Jack Voir le message
    je ne vois pas la différence entre le 1er et le 2nd while.

    A+
    Ben si : pour le premier, on va exécuter en boucle l'instruction suivante (sans doute sur la ligne suivante), alors que pour le deuxième, on boucle sans rien faire.

  4. #4
    Jack
    Modérateur

    Re : Syntaxe LangageC

    j'avais loupé le ;

    A+
    Dernière modification par Jack ; 07/11/2010 à 16h44.

  5. A voir en vidéo sur Futura
  6. #5
    whoami

    Re : Syntaxe LangageC

    Bonjour,

    D'un autre côté, j'avoue que pour moi, il y a une erreur de syntaxe, et le compilateur devrait gueuler en voyant
    while(i", gpib_tx_buff[k])
    Je n'ai jamais utilisé un compilateur mikroC, mais s'il accepte ça, alors il est tellement loin de la syntaxe standard que ça m'inquiète (" est le délimiteur de chaînes de caractères !!).

  7. #6
    Jack
    Modérateur

    Re : Syntaxe LangageC

    En plus, le fait de mettre 2 termes dans l'expression suivant le while n'est pas des plus expressives bien que syntaxiquement autorisée.

    Pour le ", c'est assez suspect en effet.

    A+

  8. #7
    whoami

    Re : Syntaxe LangageC

    Bonjour,
    Citation Envoyé par Jack Voir le message
    En plus, le fait de mettre 2 termes dans l'expression suivant le while n'est pas des plus expressives bien que syntaxiquement autorisée.
    Certains programmeurs s'amusent à faire ça, croyant gagner du temps en évitant d'entrer quelques caractères au moment de l'écriture du source ...

    ... mais qui généralement en perdent à la fin, car très souvent ils sont perdus dans les arcanes de leur code lors des maintenances/modifications.

    D'autres le font pour pousser leur(s) successeur(s) à paraître moins bon(s) qu'eux, puisqu'il leur faudra un peu plus de temps pour comprendre le code, et ainsi parfois amener leur ex-patron à les rappeler (si, si, j'ai connu un cas )

  9. #8
    pirlo21

    Re : Syntaxe LangageC

    Merci les gars pour vos reponses,
    voici une portion du code source
    ----------------------------------------------------------
    void fonction()
    {
    LATA = 0b11111111;
    LATC = 0xAE;
    TRISC = 0x8F;
    TRISB = 0x8C;
    TRISA = 0x80;
    TRISAbits.TRISA4 = 0;
    i=0;
    char gpib_tx_buff[80]
    while(i", gpib_tx_buff[j]);
    }
    else
    {
    bloc d'instructions
    }
    if (condition1 && condition 2)
    {
    Bloc d'instructions
    }
    quelques instructions (dédiées à mikroC) en dehors du if avant de fermer la fonction
    --------------------------------------------------------------
    je la suspecte trop car il y a immediatement une accolade de fermeture derriere le while dont on parlait. le j n'est pas initialisé et ne figure meme pas dans le bloc d'instructions et n'est ni incrementé ni décrémenté.
    Je pense que c'est un code source bidon sur lequel je suis tombé.
    Si quelqu'un y voit quelque chose. Cela serait sympathique de m'aider.
    N'oubliez pas, je ne veux votre aide que sur la syntaxe et non pas sur le code lui meme car je tiens vraiment à me casser la tête avec.
    Je pense que l'auteur utilise le C sous LINUX que je ne connais pas. donc si la dite instruction apparait dans un cours ou siteweb veuillez me laisser le conseil ou le lien. le googling ne donne rien jusquà présent.
    merci infiniment

  10. #9
    bzh_nicolas

    Re : Syntaxe LangageC

    J'ai essayé d'indenter le code, tout bonnement impossible.

    Ou as-tu trouvé ce code ? J'aimerais bien le voir dans son contexte.
    Car là ça ne veut strictement rien dire. Soit il en manque un bon morceau, soit ça n'est tout simplement pas un vrai code...

    Possibilité subsidiaire (mais qui me paraitrait étonnante) c'est un problème d'encodage des caractères du fichier qui remplacerait un caractère par un autre. (mais je n'y croit pas trop)

  11. #10
    pirlo21

    Re : Syntaxe LangageC

    Citation Envoyé par bzh_nicolas Voir le message
    J'ai essayé d'indenter le code, tout bonnement impossible.

    Ou as-tu trouvé ce code ? J'aimerais bien le voir dans son contexte.
    Car là ça ne veut strictement rien dire. Soit il en manque un bon morceau, soit ça n'est tout simplement pas un vrai code...

    Possibilité subsidiaire (mais qui me paraitrait étonnante) c'est un problème d'encodage des caractères du fichier qui remplacerait un caractère par un autre. (mais je n'y croit pas trop)
    re-salut
    Monsieur bzh_nicolas, voici le code (il suffit de cliquer sur le lien suivant)
    http://www.dalton.ax/gpib/code/index.shtml
    esperons que cela ne vous fera pas perdre votre temps.
    merci

  12. #11
    lou_ibmix_xi

    Re : Syntaxe LangageC

    Ton code n'apparait pas dans le lien que tu donnes!
    Précises quelles lignes tu ne comprends pas dans le lien. Si tu veux coller des parties de code ici, utilise les balises idoines:
    [CODE] pour commencer puis [/CODE] (enlève les espace après les [ ; note de la modération : pour rendre visible une balise BB, sans la modifier, il suffit de l'encadrer de la balise [noparse] ... [/noparse])
    Dernière modification par Philou67 ; 09/11/2010 à 09h58.

  13. #12
    pirlo21

    Re : Syntaxe LangageC

    ok voici le code,
    il est un peu long. la partie dont je parle est celle écrite en rouge.
    bonne lecture
    Code:
    #include 
    #include 
    #include "./USB/usb.h"
    #include "./USB/usb_function_cdc.h"
    #include "gpib.h"
    
    unsigned char gpib_buff[GPIB_MAX_LEN];
    unsigned char gpib_ptr;
    char gpib_tx_buff[GPIB_MAX_LEN];
    char gpib_tx_ptr;
    unsigned char i,j;
    unsigned long count;
    extern char string[GPIB_MAX_LEN];
    extern unsigned char string_offset;
    unsigned char rx_state;				// Rx state machine state
    unsigned char tx_state;				// Tx state machine state
    extern USB_HANDLE CDCDataOutHandle;	// So that we can break out on USB incoming
    extern volatile BOOL Verbose;
    
    void gpib_init()
    {
    	LATA = 0b00100000;			// REN high.
    	LATC = 0x00;
    	TRISC = 0xff;
    	TRISB = 0xff;
    	TRISA = 0xff;
    	TRISAbits.TRISA5 = 1;		// Deassert REN
    	//
     	// Zero the GPIB buffers and pointers
    	//
    	gpib_ptr = 0;
    	gpib_tx_ptr = 0;
    	i=0;
    	while(i", gpib_tx_buff[j]);
    				}
                                    else
    				{
    					string_offset += sprintf(string+string_offset,(const far rom char*)"%c", gpib_tx_buff[j]);
    				}
    				if (j == gpib_tx_buff[1]-1 && gpib_tx_buff[j] == 10) // Last char is LF??
    				{
    					TRISAbits.TRISA4 = 0; // EOI true
    					string_offset += sprintf(string+string_offset,(const far rom char*)"%S", "");
    					//putsUSBUSART(string);
    				}
    				LATB = ~gpib_tx_buff[j];					// Put data on bus
    				++j;
    				TRISB=0x00; 										// Make data lines output
    																	//		A GPIB Talker, transfers data bytes to GPIB Listeners, it drives
    																	//		the data byte on the GPIB DIO[8–1] signals. After waiting for a certain delay (known as
    																	//		the T1 delay), the Talker asserts DAV to indicate to the Listeners that the data byte
    																	//		has settled on the DIO[8–1] signals. A delay of 2us should satisfy most implementations.
    																	//		http://www.ni.com/pdf/manuals/370875a.pdf
    				count = 2;
    				while(count){count--;} 								// wait to settle line
    				tx_state = GPIB_TX_WAIT_FOR_NRFD;
    				count = TIMEOUT;
    				break;
    			case GPIB_TX_WAIT_FOR_NRFD:								// Wait for NRFD high
    				if (PORTCbits.RC1 == 1 || count--<=0) tx_state = GPIB_TX_SET_DAV_LOW;
    
    				break;
    			case GPIB_TX_SET_DAV_LOW:
    				//		DAV = 0;
    				TRISCbits.TRISC0 = 0;
    				tx_state = GPIB_TX_WAIT_FOR_NDAC;
    				count = TIMEOUT;
    				break;
    			case GPIB_TX_WAIT_FOR_NDAC:
    				if (PORTCbits.RC2 == 1 || count--<=0) tx_state = GPIB_TX_SET_DAV_HIGH;
    				break;
    			case GPIB_TX_SET_DAV_HIGH:
    				TRISB=0xff; 										// data lines tristate
    				TRISAbits.TRISA4 = 1; 								// EOI false
    				//		DAV = 1;
    				TRISCbits.TRISC0 = 1;								// DAV high
    				//
    				// More data?
    				//
    				if (j < gpib_tx_buff[1]) tx_state = GPIB_TX_CHECK;
    				else tx_state = GPIB_TX_DONE;
    				break;
    			case GPIB_TX_ERROR:
    				string_offset += sprintf(string+string_offset,(const far rom char*)"%S", "");
    				tx_state = GPIB_TX_DONE;
    				break;
    		}
    	}
    	// All sent
    	if(gpib_tx_buff[0] == '2') {TRISAbits.TRISA3 = 1;} // ATN = 1
    	TRISCbits.TRISC0 = 1;
    	TRISC = 0xff;													// DAV, NRFD etc threestate (input)
    	TRISB = 0xff;													// Data threestate (input)
    	TRISA = (TRISA | 0b11011111);									// Do not touch REN.
    
    	if(string_offset > 0)
    	{
    		string_offset += sprintf(string+string_offset,(const far rom char*)"\r\n");
    		if (Verbose) putsUSBUSART(string);
    		string_offset = 0;
    	}
    }
    
    //
    // Receive a string of maximum GPIB_MAX_LEN chars from GPIB. Routine will loop forever and only exit when it has seen an LF, EOI or if the 
    // buffer is full. It will also exit if you send new data over USB
    //
    void readgpib(void)
    {
    	gpib_ptr=0;
    	LATA = (LATA & 0b00100000);			// Do not touch REN.
    	LATC = 0x00;
    	TRISC = 0xf9;
    	TRISB = 0xff;
    	TRISA = (TRISA | 0b11011111);			// Do not touch REN.
    	rx_state = GPIB_RX_START;
    	memset(gpib_buff,'X',sizeof(gpib_buff)); // Init buffer to a known state
    
    	while(rx_state != GPIB_RX_DONE)
    	{
    		sprintf(string,(const far rom char*)"State:%d %d %X %X %d %d       ", rx_state,gpib_ptr ,PORTB, PORTC, PORTAbits.RA4,USBHandleBusy(CDCDataOutHandle));
    //		while(!USBUSARTIsTxTrfReady())
    //			;
    		//putsUSBUSART(string);
    		//
    		CDCTxService();
    		//
    		//
    		// if((PORTB ==245 && gpib_ptr>0)||  gpib_ptr>=GPIB_MAX_LEN || !USBHandleBusy(CDCDataOutHandle)) // 245 is LF inverted 
    		if(gpib_ptr>=GPIB_MAX_LEN || !USBHandleBusy(CDCDataOutHandle))
    		{										// Break out if Buffer full or USB rx
    			rx_state = GPIB_RX_FINISH;
    		}
    		if (gpib_ptr>0)							// If we have data in buffer, check is last one was LF
    		{
    			if(gpib_buff[gpib_ptr-1] == 0x0a) rx_state = GPIB_RX_FINISH;
    		} 
    		
    		switch(rx_state)
    		{
    			case GPIB_RX_START:
    				//		NRFD = 0;
    				TRISCbits.TRISC1 = 0;			// Set both NRFD and NDAC low
    				//NDAC = 0;
    				TRISCbits.TRISC2 = 0;
    				rx_state = GPIB_RX_ACCEPT;
    				break;
    	
    			case GPIB_RX_ACCEPT:
    
    				//		NRFD = 1;
    				TRISCbits.TRISC1 = 1;			// Set NRFD high
    				rx_state = GPIB_RX_WAIT_DAV;
    				break;
    	
    			case GPIB_RX_WAIT_DAV:				// Wait here for DAV to go low
    	
    				if (PORTCbits.RC0 == 0) rx_state = GPIB_RX_DAV_LOW;
    				break;
    	
    			case GPIB_RX_DAV_LOW:
    				//		NRFD = 1;
    				TRISCbits.TRISC1 = 0;			// Set NRFD low
    				gpib_buff[gpib_ptr] = ~PORTB;	// Accept databyte
    				gpib_ptr++;
    				//
    				count = 1000;
    				while (count)
    				{
    					count--;
    				}
    				//NDAC = 1;
    				TRISCbits.TRISC2 = 1;			// Set NDAC high
    				rx_state = GPIB_RX_WAIT_DAV_HIGH;
    				break;
    	
    			case GPIB_RX_WAIT_DAV_HIGH:			// Wait here for DAV to go high
    	
    				if (PORTCbits.RC0 == 1) rx_state = GPIB_RX_DAV_HIGH;
    				break;
    	
    			case GPIB_RX_DAV_HIGH:
    				//NDAC = 0;
    				TRISCbits.TRISC2 = 0;			// Set NDAC low
    				if (PORTAbits.RA4 == 0)			// seen an EOI? EOI is set on the last byte of data message
    				{
    					rx_state = GPIB_RX_EOI;
    					count = 1000;						// Prime timeout counter
    				}
    				rx_state = GPIB_RX_ACCEPT;		// and back to the top
    				break;
    	
    			case GPIB_RX_EOI:					// Seen an EOI, ack and wait here until it goes away or timeout
    				//NDAC = 1;
    				TRISCbits.TRISC2 = 1;			// Set NDAC high
    				if (PORTAbits.RA4 == 1) rx_state = GPIB_RX_FINISH;
    				count--;
    				if (count <=0) rx_state = GPIB_RX_FINISH;
    				break;
    
    			case GPIB_RX_FINISH:
    				//		NRFD = 0;
    				TRISCbits.TRISC1 = 0;			// Set both NRFD and NDAC low
    				//NDAC = 0;
    				TRISCbits.TRISC2 = 0;
    				rx_state = GPIB_RX_DONE;
    				break;
    		}
    	} // while
    	//sprintf(string,(const far rom char*)"%S","\n\rRX Exit");
    	//	while(!mUSBUSARTIsTxTrfReady())
    	//		;
    	//putsUSBUSART(string);
    }
    
    //
    // Interface clear
    //
    void gpib_ifc(void)
    {
    	TRISAbits.TRISA1 = 0;
    	PORTAbits.RA1 = 0;
    	//
    	// Hold IFC low for >100us
    	count = TIMEOUT;
    	while (count)
    	{
    		count--;
    	}
    	TRISAbits.TRISA1 = 1;
    	PORTAbits.RA1 = 1;
    	count = TIMEOUT;
    	while (count)
    	{
    		count--;
    	}
    }
    
    //
    // Assert REN to put instrument in remote mode
    // state = true -> assert REN, state = false -> deasert REN
    //
    void gpib_ren(unsigned char state)
    {
    	if(state == true)
    	{
    		TRISAbits.TRISA5 = 0;		// Assert REN
    		PORTAbits.RA5 = 0;
    	}
    	else
    	{
    		TRISAbits.TRISA5 = 1;		// Deassert REN
    		PORTAbits.RA5 = 1;
    	}
    }
    d'après le site : http://www.dalton.ax/gpib/code/index.shtml

  14. #13
    whoami

    Re : Syntaxe LangageC

    Bonjour,

    Après une mise en forme du code, et un bref coup d'œil, il y a plein d'erreurs.

    Pour n'en montrer qu'un minimum :
    Code:
    void gpib_init()
    {
        LATA = 0b00100000;			// REN high.
        LATC = 0x00;
        TRISC = 0xff;
        TRISB = 0xff;
        TRISA = 0xff;
        TRISAbits.TRISA5 = 1;		// Deassert REN
        //
        // Zero the GPIB buffers and pointers
        //
        gpib_ptr = 0;
        gpib_tx_ptr = 0;
        i=0;
        while(i", gpib_tx_buff[j]); // bien évidemment, toujours cette ligne !!
            } // cette accolade ferme la fonction
                else // ce else ne correspond à aucun if
                {
    En clair, ce code est un grand foutoir, et je crois que tu as intérêt à reprendre à zéro.

    GPIB ! j'ai écrit pas mal de code pour ce bus (il y a longtemps, et c'était en Pascal).

  15. #14
    Hayuki

    Re : Syntaxe LangageC

    moi je te conseil de reprendre le code depuis le lien étant donné qu'il est completement différent du fichier source du lien que tu as donné

  16. #15
    Philou67

    Re : Syntaxe LangageC

    Le code que tu as posté en lien sur dalton.ax est différent de celui que tu as posté en pièce jointe.
    Il contient lui aussi une erreur (sémantique sans doute, et peut-être non détectée par le compilateur), avec une forme syntaxique du style :
    Code:
    while () {
    }
    else {
    }
    ce qui est pour le moins étrange.

    N'aurais-tu pas malencontreusement "modifié" le source original lors d'une manipulation de copier/coller ?
    :'( Plus j'apprends, et plus je mesure mon ignorance

  17. #16
    bzh_nicolas

    Re : Syntaxe LangageC

    Citation Envoyé par Philou67 Voir le message
    Le code que tu as posté en lien sur dalton.ax est différent de celui que tu as posté en pièce jointe.
    Il contient lui aussi une erreur (sémantique sans doute, et peut-être non détectée par le compilateur), avec une forme syntaxique du style :
    Code:
    while () {
    }
    else {
    }
    ce qui est pour le moins étrange.

    N'aurais-tu pas malencontreusement "modifié" le source original lors d'une manipulation de copier/coller ?
    Son copié -collé est faux mais de toute façon le code aussi, toute la fonction gpib_init() à des problèmes, surement lorsque l'auteur du site à copier-coller le code dans sa page html. Il doit manquer des lignes...

    Code:
    while(i<' ')
    Ok mais i n'est jamais modifié dans la boucle et il n'y a pas d'instruction de sortie de boucle non plus donc boucle infinie
    Code:
    while(i<' ')
      {
        [...] 
      }
      else
      {
    Comme l'a dit Philou67, il manque le if;
    Code:
    count = 2;
    while(count){count--;} // wait to settle line
    Pas d'erreur de sémantique mais méthode de temporisation étrange qui va dépendre de la puissance et de la charge du processeur...
    Peut-être normal dans ce contexte, je ne saurais dire...
    Code:
        tx_state = GPIB_TX_WAIT_FOR_NRFD;
        count = TIMEOUT;
        break;
      case GPIB_TX_WAIT_FOR_NRFD:  // Wait for NRFD high
        if (PORTCbits.RC1 == 1 || count--<=0) tx_state = GPIB_TX_SET_DAV_LOW;
      break;
    Il manque le switch ici.
    Rien ne me saute aux yeux dans le reste du code (à part la méthode de temporisation qui revient plusieurs fois) ce qui me fait pencher vers une erreur de copier-coller de l'auteur du site.

    Citation Envoyé par pirlo21 Voir le message
    re-salut
    Monsieur bzh_nicolas, voici le code (il suffit de cliquer sur le lien suivant)
    http://www.dalton.ax/gpib/code/index.shtml
    esperons que cela ne vous fera pas perdre votre temps.
    merci
    Donc, OUI, ça me fait perdre mon temps (et le tiens aussi par la même occasion) à essayer de comprendre un code incomplet...

  18. #17
    pirlo21

    Re : Syntaxe LangageC

    Citation Envoyé par whoami Voir le message
    Bonjour,
    Après une mise en forme du code, et un bref coup d'œil, il y a plein d'erreurs.
    En clair, ce code est un grand foutoir, et je crois que tu as intérêt à reprendre à zéro.
    GPIB ! j'ai écrit pas mal de code pour ce bus (il y a longtemps, et c'était en Pascal).
    Pouvez vous me donner un de ces code pour comprendre comment on fait pour gerer ce bus. car jusqu'à present les manuels du protocol IEEE488 sont bourrés de bla bla et ne servent pratiquement à rien. Cela me serait très utile car je comprend un peu le Pascal. Ce qui me rendra l'écriture d'un code en C ou en assembleur encore meilleur.
    Merci bien

  19. #18
    whoami

    Re : Syntaxe LangageC

    Bonjour,

    Désolé, je n'ai pas les sources, et de toute manière, je n'aurais pas le droit de te les fournir : selon la loi, elles appartiennent à la société qui m'employait à l'époque.

    Mais on trouve facilement de la doc sur le GPIB.

    Que penses-tu qu'on faisait à l'époque ?

    On épluchait les docs, et on testait.

  20. #19
    pirlo21

    Re : Syntaxe LangageC

    Bonjour,
    Merci bien pour l'intérêt que vous avez porté à mon post. L'excuse que vous avez fournie est très convaincante: personne ne vous demandera d'enfreindre ni la loi ni un secret de boulot. Juste un petit truc, lorsque je vous ai demandé de me donner le code je croyais que vous l'avez fait en tant qu'amateur à la maison. Donc prière de m'excuser pour cette intrusion (=demande mal placée).
    Ok comme vous le dite, je ferai des tests et je verrai. Esperons juste que cela ne bousille pas ma carte.
    Merci encore pour votre réponse et conseils
    Amicalement Pirlo21
    Dernière modification par Philou67 ; 10/11/2010 à 07h24. Motif: Citation inutile

  21. #20
    pirlo21

    Re : Syntaxe LangageC

    Salut messieurs Hayuki, Philou67 et bzh_nicolas
    effectivement j'ai modifié le code parce que je ne répète pas ce que fait le messieur sur le site dalton.ax puisque moi j'ai deja réalisé ma propre carte avec les caractéristique HARDWARE du bus GPIB. Il me faut juste le code. C'est pour cela que le code doit etre normalement modifié car j'ai un brochage different du sien ce qui justifie le changement des valeurs du TRIS et LAT. Si le code que j'ai posté n'est pas le meme en terme d'accolade c'est aussi parce que j'ai essayé de minimiser les erreurs detectées par le compilateur C dans le but de le réaliser sous langage assembleur qui me sera très rapide. C'est pour cela que je me demande si la syntaxe est bonne ou pas.
    Mille merci à vous tous

  22. #21
    Philou67

    Re : Syntaxe LangageC

    La réponse est donc : non, la syntaxe n'est pas correcte.

    Le mieux serait peut-être qu'à chaque étape de ton code source, tu indiques clairement dans un commentaire ce que tu souhaites faire.
    Il nous sera alors plus facile de t'indiquer la syntaxe correcte pour chaque opération.
    Bonne journée.
    :'( Plus j'apprends, et plus je mesure mon ignorance

Discussions similaires

  1. Question de syntaxe
    Par invitefa769f9f dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 25/10/2007, 11h30
  2. Syntaxe programme C++
    Par invite55fe29e6 dans le forum Électronique
    Réponses: 6
    Dernier message: 06/07/2007, 09h50
  3. pic et langageC
    Par invite9b9d0eb8 dans le forum Électronique
    Réponses: 1
    Dernier message: 30/10/2006, 13h53
  4. Syntaxe mutation
    Par brunop dans le forum Biologie
    Réponses: 4
    Dernier message: 11/04/2006, 15h53
  5. Syntaxe
    Par brunop dans le forum Chimie
    Réponses: 1
    Dernier message: 17/01/2006, 15h33