0 BEGIN PGM 81801_FR MM 1 ;Programme CN permettant de calculer la date 2 ;et l'heure à partir de l'heure actuelle du système. 3 ;La CN a enregistré l'heure actuelle du système 4 ;dans le paramètre Q0 du programme appelé. 5 ;La valeur est le temps en secondes écoulé depuis 6 ;le 01/01/1970 à 0 heure. Comme il s'agit de l'heure 7 ;UTC, il est possible de définir la différence 8 ;d'heure entre l'heure UTC et l'heure locale. Pour 9 ;ce faire, saisir la différence entre les heures 10 ;dans le paramètre Q50. 11 ;La CN enregistre les valeurs calculées comme suit : 12 ;Q1 = année 13 ;Q2 = mois 14 ;Q3 = jour 15 ;Q4 = heure 16 ;Q5 = minute 17 ;Q6 = seconde 18 ;Vous pouvez ensuite utiliser ces valeurs. 19 ; 20 ;Saisissez la différence entre l'heure UTC et l'heure 21 ;locale en heures Q50 = 1 ;DIFFÉRENCE EN HEURES 22 ; 23 ;Ne rien changer à partir de là 24 ;Calcul des secondes au total Q10 = Q0 ;Copier l'heure du système Q51 = Q50 * 3600 ;Conversion de la différence de temps en secondes Q10 = Q10 + Q51 ;Heure du système + différence de temps 25 ;Calcul de l'année Q1 = 1969 ;Année de début 26 LBL 10 Q1 = Q1 + 1 ;Continuer à calculer un an Q12 = Q1 / 4 - INT ( Q1 / 4 ) 27 FN 10: IF +Q12 NE +0 GOTO LBL 18 ;si non divisible par 4 alors pas d'année bissextile Q12 = Q1 / 400 - INT ( Q1 / 400 ) 28 FN 9: IF +Q12 EQU +0 GOTO LBL 15 ;si divisible par 400 alors année bissextile Q12 = Q1 / 100 - INT ( Q1 / 100 ) 29 FN 9: IF +Q12 EQU +0 GOTO LBL 19 ;si divisible par 100 alors pas d'année bissextile 30 LBL 15 Q19 = 366 * 24 * 3600 ;Année en secondes Q20 = 1 ;Marqueur : année bissextile Q10 = Q10 - Q19 ;Heure du système - année 31 FN 11: IF +Q10 GT +0 GOTO LBL 10 ;si l'heure du système est positive, l'année n'a pas encore été trouvée 32 FN 9: IF +0 EQU +0 GOTO LBL 19 ;Année trouvée 33 ; 34 LBL 18 Q19 = 365 * 24 * 3600 ;Année en secondes Q20 = 0 ;Marqueur : pas d'année bissextile Q10 = Q10 - Q19 ;Heure du système - année 35 FN 11: IF +Q10 GT +0 GOTO LBL 10 ;si l'heure du système est positive, l'année n'a pas encore été trouvée 36 LBL 19 ;Année trouvée Q10 = Q10 + Q19 ;Secondes restantes jusqu'au début de l'année 37 ; 38 ;Calcul mois 39 ;Janvier Q2 = 1 ;Numéro du mois Q12 = 31 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 40 FN 11: IF +Q10 GT +0 GOTO LBL 22 ;S'il y a des secondes restantes, passe à février Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 41 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 42 ;Février 43 LBL 22 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 28 + Q20 ;Nombre de jours dans le mois + marqueur année bissextile Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 44 FN 11: IF +Q10 GT +0 GOTO LBL 23 ;S'il y a des secondes restantes, passe à mars Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 45 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 46 ;Mars 47 LBL 23 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 31 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 48 FN 11: IF +Q10 GT +0 GOTO LBL 24 ;S'il y a des secondes restantes, passe à avril Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 49 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 50 ;Avril 51 LBL 24 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 30 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 52 FN 11: IF +Q10 GT +0 GOTO LBL 25 ;S'il y a des secondes restantes, passe à mai Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 53 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 54 ;Mai 55 LBL 25 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 31 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 56 FN 11: IF +Q10 GT +0 GOTO LBL 26 ;S'il y a des secondes restantes, passe à juin Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 57 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 58 ;Juin 59 LBL 26 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 30 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 60 FN 11: IF +Q10 GT +0 GOTO LBL 27 ;S'il y a des secondes restantes, passe à juillet Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 61 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 62 ;Juillet 63 LBL 27 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 31 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 64 FN 11: IF +Q10 GT +0 GOTO LBL 28 ;S'il y a des secondes restantes, passe à août Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 65 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 66 ;Août 67 LBL 28 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 31 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 68 FN 11: IF +Q10 GT +0 GOTO LBL 29 ;S'il y a des secondes restantes, passe à septembre Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 69 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 70 ;Septembre 71 LBL 29 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 30 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 72 FN 11: IF +Q10 GT +0 GOTO LBL 30 ;S'il y a des secondes restantes, passe à octobre Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 73 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 74 ;Octobre 75 LBL 30 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 31 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 76 FN 11: IF +Q10 GT +0 GOTO LBL 31 ; S'il y a des secondes restantes, passe à novembre Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 77 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 78 ;Novembre 79 LBL 31 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 30 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 80 FN 11: IF +Q10 GT +0 GOTO LBL 32 ;S'il y a des secondes restantes, passe à décembre Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 81 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 82 ;Décembre 83 LBL 32 Q2 = Q2 + 1 ;Incrémenter le mois Q12 = 31 ;Nombre de jours dans le mois Q10 = Q10 - Q12 * 86400 ;Secondes restantes - mois en secondes 84 FN 11: IF +Q10 GT +0 GOTO LBL 38 ;S'il y a des secondes restantes, passe au message d'erreur Q10 = Q10 + Q12 * 86400 ;Secondes restantes au début du mois 85 FN 9: IF +0 EQU +0 GOTO LBL 39 ;Saut au calcul du jour 86 ;Émission du message d'erreur 87 LBL 38 88 FN 14: ERROR= 1088 ;Données contestables 89 ;Calcul du jour 90 LBL 39 Q3 = INT ( Q10 / 86400 ) + 1 ;Définir le jour Q10 = Q10 - ( ( Q3 - 1 ) * 86400 ) ;Calcul des secondes restantes 91 ;Calcul des heures Q4 = INT ( Q10 / 3600 ) ;Déterminer les heures Q10 = Q10 - ( Q4 * 3600 ) ;Calcul des secondes restantes 92 ;Calcul des minutes Q5 = INT ( Q10 / 60 ) ;Déterminer les minutes Q10 = Q10 - ( Q5 * 60 ) ;Déterminer les secondes restantes 93 ;Calcul en secondes Q6 = INT Q10 ;Déterminer les secondes 94 ;Fin du programme 95 END PGM 81801_FR MM