-
Notifications
You must be signed in to change notification settings - Fork 0
/
calendrier.hpweb
1073 lines (996 loc) · 39 KB
/
calendrier.hpweb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
fr: Calendriers
en: Calendars
calfr-48: dir
calfr-dbg-48: dir
calfr-50: dir
calfr-dbg-50: dir
cvtcar: code
subsg: code
---
- section: 0
fr: Conversion entre calendriers
en: Conversion between calendars
- fr: |
Cette série de programmes s'applique à trois calendriers
différents.
<ul>
<li> Le calendrier grégorien proleptique. Il s'agit du
calendrier grégorien, extrapolé dans le passé au-delà
de l'année 1582, bien que la HP-48
n'accepte les dates qu'à partir de cette année.
Non seulement la règle des années bissextiles est celle du
calendrier grégorien, mais en plus on considère que l'année
commence toujours le premier janvier, ce qui n'était pas toujours
le cas avec les calendriers réellement en usage au Moyen-Âge.
Les dates grégoriennes sont exprimées avec un nombre au format
JJ,MMAAAA ou bien MM,JJAAAA, en fonction de l'indicateur -42.</li>
<li> Le <i lang='la'>Rata Die</i> (RD). C'est un calendrier qui
ignore totalement les années. Il ne compte que les jours, à partir
du 1<sup>er</sup> janvier de l'an 1 du calendrier grégorien
proleptique. Très pratique pour les
calculateurs, beaucoup moins pour les humains.
En fait, le calendrier <i lang='la'>Rata Die</i> ne vous servira
pas en tant que tel, mais simplement comme intermédiaire entre
les deux autres.
</li>
<li> Le calendrier républicain. Le calendrier républicain
a été en vigueur de 1792 à 1805, mais les programmes permettent
d'utiliser des dates jusqu'à aujourd'hui et au-delà.
Les dates sont exprimées par un nombre au format AAAAMMJJ.
Il y a douze mois de 30 jours chacun, plus 5 ou 6 jours
complémentaires à la fin de l'année. Pour des raisons de simplicité,
ces jours complémentaires constituent un mois supplémentaire numéroté 13.
</li>
</ul>
- en: |
This group of programs applies to three different calendars.
<ul>
<li> The proleptic Gregorian calendar. This is the Gregorian
calendar, but extending in the past farther than 1582, although
the HP-48 accepts dates only after this year. Not only the leap
year rule is the same as the Gregorian rule, but also the beginning
of the year is always on January 1st, although it was not always
the case during the Middle Ages. The Gregorian dates
are written in the standard HP-48 way, that is, DD,MMYYYY or
MM,DDYYYY depending on the setting of flag -42.
</li>
<li>The <i lang='la'>Rata Die</i> calendar. This calendar ignores
completely the notion of year. It counts only the days since
January 1st, year 1, in the proleptic Gregorian calendar.
Very convenient for computers, much less for humans.
Actually, the HP-48 just uses the <i lang='la'>Rata Die</i> calendar
as a step between the two other calendars.
</li>
<li>The French Revolutionary calendar. This calendar was in effect
in France only and from 1792 to 1805 only, but the programs allow you to
use dates past this limit, until today and beyond. The dates are
entered as integer numbers YYYYMMDD. This calendar contains
12 months of 30 days each, plus 5 or 6 additional days. For convenience,
these additional days are grouped together in what is considered
as an additional month, numbered 13.
</li>
</ul>
- section: 0
fr: Mode d'emploi
en: Instructions for Use
- fr: |
Pour déterminer à quelle date du calendrier républicain correspond
le 6 juin 1944, voici comment procéder. Tapez au choix :
- en: |
For example, you want to know which French Revolutionary date
corresponds to June 6th, 1944. Just type any of:
- code: |
6,061944 @GRFR@
6,061944 @GRFR@ @FRABR@
6,061944 @GRFR@ @FRLONG@
- fr: |
et vous apprenez qu'il s'agit d'octidi, 18 prairial CLII.
Selon le cas, vous obtenez le résultat sous forme
numérique 1520918, sous forme abrégée « 18 PRA 152 »
ou sous forme longue,
« Octidi 18 Prairial CLII ».
- en: |
and you learn that it was octidi, 18 prairial CLII.
Depending on the command you used, you obtain the
result as a number, 1520918, as an abbreviated string
« 18 PRA 152 » or a long string
« Octidi 18 Prairial CLII ».
- fr: |
La conversion dans l'autre sens nécessite que vous connaissiez
l'ordre des mois et que vous fassiez de tête la conversion en
nombre. Ainsi, pour convertir le décadi 20 brumaire CXXVII,
vous convertissez de tête « brumaire » en « 2 »
puis vous tapez :
- en: |
The reverse conversion requires you to know the order of the
months and to convert the date into a YYYYMMDD number by yourself.
For example, if you want to convert décadi 20 brumaire CXXVII,
you first have to convert « brumaire » into « 2 »
and then, you write:
- code: |
1270220 @FRGR@
- fr: |
et vous obtenez 11,111918, c'est-à-dire le 11 novembre 1918.
- en: |
and the result is 11,111918, which is November 11th, 1918.
- fr: |
Il avait été question de décimaliser l'heure, avec
10 heures par jour, 100 minutes par heure et 100 secondes
par minute. Cette partie de la réforme n'a jamais été
mise en application. Néanmoins, quelques programmes
vous permettent d'utiliser une heure décimale.
- en: |
Another reform had been proposed, but never put in effect,
the decimalisation of time. Each day was divided into 10 hours,
each hour into 100 minutes and each minute into 100 seconds.
Although this reform was never applied, a few programs
allow you to use a decimal time.
- fr: |
Les heures décimales sont exprimées comme les heures normales
en H,MMSS. Pour convertir 19 h 45 en décimal, tapez au choix :
- en: |
Decimal time has the same format as the usual sexagesimal time:
H,MMSS. To convert 19 h 45 (or 7 h 45 PM) into decimal, type any of:
- code: |
19,45 @H24H10@ @PRH10@
19,45 @H24H10@
- fr: et vous obtenez le nombre 8,2292 ou la chaîne "8:22:92".
- en: and the result is either the number 8,2292 or the string "8:22:92".
- fr: |
Une dernière commande utile est @MAINTENANT@, qui donne à la fois le
jour et l'heure courants, en utilisant le format long.
- en: |
A last command is @MAINTENANT@ (now), which gives the current day
and current time in long format.
- section: 0
'fr,en': Installation
- section: 0
fr: Quels fichiers faut-il installer
en: Which files must be installed
level: 3
- fr: |
Si vous utilisez une carte SD, ou bien dans le cas d'un glisser-déposer
sur un émulateur comme « emu48 », alors vous aurez besoin
de @SUBSG@ et de @CVTCAR@. Si vous utilisez le logiciel de connexion
« conn4x », ces deux programmes sont inutiles, le logiciel
de connexion prenant à sa charge les transformations.
- en: |
If you use a SD card, or if you drag-and-drop into an emulator such
as "emu48", you will need @SUBSG@ and @CVTCAR@. If you use a connection
software such as "conn4x", this software performs the transformations
processed by @SUBSG@ and @CVTCAR@ so you do not need to install them.
- fr: |
Pour les fichiers en « 48 » et en « 50 », essayez
d'abord ces quelques commandes. Tapez un nombre avec une partie décimale,
comme « 1,5 ». Prenez la partie entière (<tt>IP</tt>) puis
convertissez en chaîne (<tt>\->STR</tt>). Si vous obtenez une chaîne
sans virgule, (<tt>"1"</tt> dans l'exemple), utilisez les fichiers en
48. Si vous obtenez une chaîne avec une virgule (<tt>"1,"</tt>)
alors vous devrez utiliser les fichiers en « 50 ».
- en: |
About files ending in "48" and "50": first try this experiment.
Type a number with a fractional part (<tt>1.5</tt> for example). Then
extract its integer part with <tt>IP</tt> and convert into a
string with <tt>\->STR</tt>. If the result is a comma-less string
(<tt>"1"</tt> in the example above), use the 48-ending files.
If the result includes a comma (<tt>1,</tt>), use the 50-ending files.
- fr: |
Les fichiers <tt>calfr-dbg-48</tt> et <tt>calfr-dbg-50</tt> comportent 16
entrées de menu, ce qui vous permet de consulter et d'exécuter séparément chaque programme.
À l'inverse, les fichiers <tt>calfr-48</tt> et <tt>calfr-50</tt> ne comportent
que les 10 entrées de menu indispensables, les autres programmes étant stockés
dans des variables locales des 10 premiers programmes. Avec ces deux
fichiers, le menu <tt>VAR</tt> est moins encombré.
- en: |
The files <tt>calfr-dbg-48</tt> and <tt>calfr-dbg-50</tt> contain 16
menu entries, which allow you to examine and execute separately all programs.
On the other side, the files <tt>calfr-48</tt> and <tt>calfr-50</tt>
contain only the 10 necessary directory entries, some programs being
stored in other programs' local variables, so the <tt>VAR</tt> menu
is less cluttered.
- fr: |
Vous pouvez charger le fichier <tt>frf</tt> ou le laisser de côté.
Si vous n'utilisez pas ce fichier, le répertoire contenant les
programmes de conversion occupera moins de 2800 octets. Si vous
incluez le fichier <tt>frf</tt>, cela ajoutera 4758 octets.
Tout dépend de la place disponible sur votre calculatrice.
- en: |
You can install the <tt>frf</tt> file or not. If you do not
install it, the directory with the conversion programs will
use less than 2800 bytes. Using <tt>frf</tt> will add 4758
bytes. All depends on the available space on your HP computer.
- section: 0
fr: Installation avec une carte SD
en: Installation with a SD card
level: 3
- section: 0
fr: Première étape
en: First Step
level: 4
- fr: |
Tout d'abord, il faut positionner le drapeau -51, pour que le délimiteur
de la partie décimale d'un nombre soit la virgule et non pas le point.
- en: |
First, the -51 flag must be set, so the character separating the
fractional part from the integer part of a number will be the comma.
- section: 0
fr: Copie de <tt>subsg</tt>
en: Copying <tt>subsg</tt>
level: 4
- fr: |
Chargez le fichier <tt>subsg</tt> sur la calculatrice, ce qui
donne une chaîne dans la pile.
Passez en mode édition sur cette chaîne. Sur la deuxième ligne,
remplacez la chaîne <tt>"\\->"</tt> par une flèche <tt>\-></tt>
(shift-droit zéro). Quittez l'édition en sauvegardant votre
modification.
Puis convertissez la chaîne en programme (<tt>PRG TYPE OBJ\-></tt>
ou bien shift-gauche N E A sur la HP-50, ou H C A sur la HP-48).
Stockez le résultat dans @SUBSG@.
- en: |
Copy the <tt>subsg</tt> file to the HP calculator, which gives a
string on the stack.
Edit the content of this string. On the second line, replace the
<tt>"\\->"</tt> string by an arrow <tt>\-></tt> (right-shift
zero). Quit the editor and save your edits.
Then convert the string to a program (<tt>PRG TYPE OBJ\-></tt> or
left-shift N E A on the HP-50, or H C A on the HP-48).
Store the result into @SUBSG@.
- section: 0
fr: Copie de <tt>cvtcar</tt>
en: Copying <tt>cvtcar</tt>
level: 4
- fr: |
Chargez le fichier <tt>cvtcar</tt> sur la calculatrice, ce qui
donne une chaîne dans la pile.
Puis convertissez la chaîne en programme (<tt>PRG TYPE
OBJ\-></tt>).
Stockez le résultat dans @CVTCAR@. Il n'y a pas besoin d'éditer la
chaîne avant la conversion en programme.
- en: |
Copy the <tt>cvtcar</tt> file to the HP calculator, which gives a
string on the stack.
Then convert the string to a program (<tt>PRG TYPE OBJ\-></tt>).
Store the result into @CVTCAR@. There is no need to edit the
string before converting it into a program.
- section: 0
fr: Copie de <tt>calfr</tt><var>-xxx</var>
en: Copying <tt>calfr</tt><var>-xxx</var>
level: 4
- fr: |
Copiez le fichier <tt>calfr</tt><var>-xxx</var> adapté à votre cas.
Comme précédemment, cela donne une chaîne dans la pile.
Lancez @CVTCAR@ pour modifier les trigrammes tels que
<tt>"\\->"</tt> en caractères spéciaux.
Puis convertissez la chaîne en objet (<tt>PRG TYPE OBJ\-></tt>),
cette fois un objet de type répertoire (DIR).
Stockez le résultat avec un nom à votre convenance.
- en: |
Copy the <tt>calfr</tt><var>-xxx</var> file which you find convenient (see above).
As before, this results in a string in the stack.
Run @CVTCAR@ to replace trigrams such as <tt>"\\->"</tt> by the
corresponding special characters.
Then, convert the string into an object (<tt>PRG TYPE
OBJ\-></tt>), but this time, this object is a directory (DIR).
Store the result with the name you prefer.
- fr: |
Essayez la fonction @MAINTENANT@. Si vous obtenez un message
« DDAYS Error: Invalid Date », c'est que vous avez oublié
de sélectionner la virgule décimale. Supprimez le contenu du
répertoire, puis le répertoire lui-même, sélectionnez la virgule
décimale et recommencez la copie du fichier <tt>calfr</tt><var>-xxx</var>.
- en: |
Try the @MAINTENANT@ (now) function. If you obtain a
« DDAYS Error: Invalid Date », that means that you have
forgotten to select the decimal comma before converting the string.
Now you have to purge the contents of the directory, then purge
the directory itself, select the decimal comma and restart with
the copying of the <tt>calfr</tt><var>-xxx</var> file.
- section: 0
fr: Copie de <tt>frf</tt>
en: Copying <tt>frf</tt>
level: 4
- fr: |
Si vous voulez utiliser la variable FRF, chargez le fichier <tt>frf</tt>
dans la pile, appliquez-lui @CVTCAR@, convertissez en objet (cette
fois-ci, c'est un tableau) et stockez le résultat dans le nom FRF.
Déplacez cette variable FRF dans le répertoire où se trouvent
les programmes de conversion.
- en: |
If you want to use the FRF variable, copy the <tt>frf</tt> file
to the calculator, run @CVTCAR@ on this string, convert
to an object (this time, this will be a list) and store it
with the name FRF. And move it into the directory where
you have stored all the conversion programs from <tt>calfr</tt><var>-xxx</var>.
- section: 0
fr: Les programmes
en: The programs
- section: GRRD
fr: Conversion de grégorien en <i lang='la'>Rata Die</i>
en: Conversion from Gregorian to <i lang='la'>Rata Die</i>
'calfr-dbg-48,calfr-dbg-50': 10
level: 3
- fr: |
La conversion grégorien \-> RD s'effectue
en deux ou trois étapes. Prenons par exemple une date au
13 septembre 1515 grégorien (une dizaine de jours avant la bataille de Marignan,
qui a eu lieu les 13 et 14 septembre 1515 exprimés dans le calendrier
julien).
On se ramène à une date postérieure à 1600, par pas de 400 ans.
Dans ce cas, cela donne 13 septembre 1915. Les trois étapes
sont donc
<ul>
<li>le RD du 1<sup>er</sup> janvier 2001 (une constante, 730486),</li>
<li>le nombre de jours (algébrique) du 1<sup>er</sup> janvier 2001 au 13
septembre 1915,</li>
<li>le nombre de jours (algébrique) du 13 septembre 1915 au 13
septembre 1515 (étape inexistante si la date à convertir avait
été postérieure au 31 décembre 1599).</li>
</ul>
À noter que l'un des avantages du 1<sup>er</sup> janvier 2001 est
qu'il s'écrit de façon indépendante du flag -42. C'est
1,012001 aussi bien en JJ,MMAAAA qu'en MM,JJAAAA.
Cette fonction est une fonction indépendante dans le cas des fichiers
<tt>calfr-dbg-</tt><var>nn</var>, mais elle est intégrée à @GRFR@ dans
le cas des fichiers <tt>calfr-</tt><var>nn</var>.
- en: |
The Gregorian \-> RD conversion is processed in two or three steps.
Let us take, for example, the 13th September 1515 in the Gregorian
Calendar (ten days before the Battle of Marignan, which took place
on 13th September 1515, Julian calendar).
The first step consists in reaching a date on 1600 or later, with
400-year increments. In this case, this results in 13th September 1915.
The three steps are:
<ul>
<li>The RD value for 1st January 2001 (constant 730486 or |JAN_2001|),</li>
<li>The algebraical number of days from 1st January 2001 to 13th September
1915,</li>
<li>The algebraical number of days from 13th September 1915 to 13th September
1515 (this step does not occur if the date to convert is later than 31th December 1599).</li>
</ul>
This function is a standalone function when provided by the
<tt>calfr-dbg-</tt><var>nn</var> files, but it is included into
@GRFR@ when provided by the <tt>calfr-</tt><var>nn</var> files.
- code: |
«
'calfr-dbg-48,calfr-dbg-50': 1
- code: |
.
0 \-> GR RD
«
WHILE GR 100 * FP 10000 * 1600 <
REPEAT
,0004 'GR' STO+
146097 'RD' STO+
END
1,012001 GR DDAYS RD - |JAN_2001| +
»
- code: |
»
'calfr-dbg-48,calfr-dbg-50': 1
- section: RDGR
fr: Conversion de <i lang='la'>Rata Die</i> en grégorien.
en: Conversion from <i lang='la'>Rata Die</i> into Gregorian.
'calfr-dbg-48,calfr-dbg-50': 11
level: 3
- fr: |
C'est le même principe en trois étapes, sauf que l'on se ramène
à une date en 2001 ou postérieure, on ne se contente pas de 1600.
Cela pourrait être modifié. Il suffit de calculer le RD de
la date seuil.
- en: |
This is the same method in three steps, except that the intermediary
date is in 2001 or later, instead of just 1600. It could be modified,
just change the threshold date.
- code: |
«
'calfr-dbg-48,calfr-dbg-50': 1
- code: |
.
\-> J
« 0
WHILE J |JAN_2001| \<=
REPEAT
,0004 +
146097 'J' STO+
END
J |JAN_2001| -
1,012001 SWAP DATE+
SWAP -
»
- code: |
»
'calfr-dbg-48,calfr-dbg-50': 1
- section: JAN_2001
level: 4
- fr: |
C'est la valeur <i lang='la'>Rata Die</i> du 1<sup>er</sup> janvier
2001. Elle est facile à calculer. Le <i lang='la'>Rata Die</i>
du 1<sup>er</sup> janvier 1 est 1. À cela, il faut ajouter 2000 ans,
soit 2000 x 365 = 730000 jours, plus les 29 février. Il y a 500 années
divisibles par 4, dont 15 ne sont pas bissextiles. Le nombre de 29 février
est donc 485, d'où un total de 730486.
- en: |
This is the <i lang='la'>Rata Die</i> value for January 1st, 2001.
This value is simple to compute. The <i lang='la'>Rata Die</i>
value of January 1st, 1 is obviously 1. We add 2000 years, that is,
2000 x 365 = 730000 days, plus the number of February 29th's in
this period. There are 500 years multiple of 4, 15 of which are not
leap years. Therefore, there are 485 leap years. And the sum
of these numbers gives the result, 730486.
- code: |
730486
- section: FRBIS
level: 3
fr: Nombre de jours bissextiles précédant l'année N du calendrier républicain.
en: Number of leap days preceding the French Revolutionary year N
'calfr-dbg-48,calfr-dbg-50': 14
- fr: |
Jusqu'en l'an 20, les années bissextiles sont calculées pour que le
jour de l'an coïncide avec l'équinoxe d'automne. Les années
bissextiles sont donc les années 3, 7, 11 et 15. À partir de l'an 20,
on adopte la règle de Romme, purement arithmétique. C'est la même
règle modulo 4, 100 et 400 que pour le calendrier grégorien.
- en: |
Until the year 20, the leap years were computed so that the first day of
the year would be on the autumn equinox. The leap years were 3, 7, 11 and 15.
Then, starting with year 20, the rule would be Romme's rule, a purely numerical one,
like the Gregorian rule, with a 4-modulus, a 100-modulus and a 400-modulus.
- fr: |
En réalité, la fonction utilise le calcul de Romme avec les modulos pour
toute la période, puis corrige le résultat pour les quelques cas où
la règle de l'équinoxe donne un résultat différent.
- en: |
In fact, the function uses the modulus rule all the time, and fixes the
result for the few cases where the equinoxial rule differs from the modulus rule.
- code: |
« \-> A
« 'A' DECR 4 / IP
A 100 / IP -
A 400 / IP +
A 4000 / IP -
IF { 3 7 11 15 } A |IP| POS 0 \=/
THEN 1 +
END
»
»
- section: FRRD
fr: Conversion de républicain en <i lang='la'>Rata Die</i>
en: Conversion from French Revolutionary to <i lang='la'>Rata Die</i>
'calfr-48,calfr-50': 12
'calfr-dbg-48,calfr-dbg-50': 12
level: 3
- fr: |
Cette fonction est indépendante, y compris dans le cas des fichiers
<tt>calfr-</tt><var>nn</var>, car elle est appelée par @RDFR@ (ou @RDGR@).
- en: |
This function is a standalone function, even when provided by the
<tt>calfr-</tt><var>nn</var>, because it is called by @RDFR@ (or @RDGR@).
- code: |
« \-> F
'calfr-dbg-48,calfr-dbg-50': 1
- code: |
« |FRBIS| \-> F FRBIS
'calfr-48,calfr-50': 1
- code: |
.
« F 100 MOD
F 100 / IP 100 MOD 30 * +
F 10000 / IP 'F' STO
F 365 * + F @FRBIS@ + 654019 +
»
»
- section: RDFR
fr: Conversion de <i lang='la'>Rata Die</i> en républicain
en: Conversion from <i lang='la'>Rata Die</i> to French Revolutionary
'calfr-dbg-48,calfr-dbg-50': 13
level: 3
- fr: |
On commence par se ramener au ``zéro" Vendémiaire de
l'an I. Puis on calcule une estimation de l'année,
en se basant sur une durée de 365 jours, ce
qui donne donc une valeur plus élevée que la valeur
réelle. Ensuite, on compare le 1<sup>er</sup> Vendémiaire
de l'année calculée avec la date à traduire. Si la
valeur calculée de l'année est trop forte, c'est-à-dire
si le 1<sup>er</sup> Vendémiaire calculé est postérieur à la
date à traduire, on recule d'un an. Ce test et ce
recul sont dans une boucle, dans l'éventualité où
l'estimation de l'année dépasserait la valeur véritable
de 2, 3, voire plus (cela se produit au bout de 1 500 ans
et des poussières, lorsque 365 jours bissextiles se sont accumulés
et que l'on demande la conversion d'une date de la fin de l'année).
Une fois le bon 1<sup>er</sup> Vendémiaire
obtenu, on calcule le nombre de jours entre lui et
la date à convertir, ce qui donne le nombre de mois
et le nombre de jours dans le dernier mois.
- en: |
We start by shifting the RD number to the "zeroth" Vendémiaire
of year I. Then, we compute an estimate of the year, by using
a 365-day duration, with no leap days. This gives an estimate
greater than the actual value. So, we compare the 1st Vendémiaire
of this year with the date to translate. If the 1st Vendémiaire
is later than the translated date, we go back one year and we
iterate. This is done in a loop, because after 1500 years or so,
the estimated year can be 2 or 3 more than the actual year, after
365 leap days have accumulated. When we have reached the proper
1st Vendémiaire, we compute the number of days between it
and the translated date, which gives the number of months and
the day number in the month.
- code: |
«
'calfr-dbg-48,calfr-dbg-50': 1
- code: |
.
0 \-> J D
«
J 10100 @FRRD@ -
365 / IP 10000 *
10101 + 'D' STO
WHILE D @FRRD@ J >
REPEAT
D 10000 - 'D' STO
END
J D @FRRD@ -
DUP 30 / IP 100 *
SWAP 30 MOD + D +
»
- code: |
»
'calfr-dbg-48,calfr-dbg-50': 1
- section: GRFR
fr: Conversion de grégorien en républicain
en: Conversion from Gregorian to French Revolutionary
'calfr-48,calfr-50': 2
'calfr-dbg-48,calfr-dbg-50': 2
level: 3
- fr: |
Les deux conversions GR \-> RD \-> FR enchaînées
- en: |
The two conversions GR \-> RD \-> FR at once.
- code: |
« |GRRD| |RDFR| »
'calfr-48,calfr-50': 1
- code: |
« @GRRD@ @RDFR@ »
'calfr-dbg-48,calfr-dbg-50': 1
- section: FRGR
fr: Conversion de républicain en grégorien
en: Conversion from French Revolutionary to Gregorian
'calfr-48,calfr-50': 3
'calfr-dbg-48,calfr-dbg-50': 3
level: 3
- fr: |
Les deux conversions FR \-> RD \-> GR enchaînées
- en: |
The two conversions FR \-> RD \-> GR at once.
- code: |
« @FRRD@ |RDGR| »
'calfr-48,calfr-50': 1
- code: |
« @FRRD@ @RDGR@ »
'calfr-dbg-48,calfr-dbg-50': 1
- section: 0
fr: Affichage d'une date du calendrier républicain
en: Printing a French Revolutionary calendar date
- fr: |
Compte tenu de la taille, la variable FRF est facultative
et l'affichage de la date tient compte du fait que
FRF peut exister ou ne pas exister.
Chaque élément de la liste FRF est composé d'un chiffre
puis d'un texte. Le chiffre permet de savoir si le texte
commence par une voyelle ou une consonne et dans le
second cas s'il est masculin ou féminin. Avec le cas
spécial du pluriel pour le "jour des récompenses".
Ce chiffre est traduit en un préfixe "jour du",
"jour de la" etc.
- en: |
Because of its size, the FRF variable is optional and
the function printing the date can work no matter whether the
variable exists or not.
Each element of the FRF list consists of a digit
and a string. The digit indicates if the string
begins with a vowel or a consonant and, in the latter
case, whether the name is masculine or feminine.
And there is the special case of the
<i lang='fr'>jour des récompenses</i> (day of rewards)
the only case where the noun is plural.
- code: |
{
"0raisin" "0safran" "1châtaigne" "1colchique"
...
"1vertu" "0génie" "0travail" "2opinion"
"3récompenses" "1révolution"
}
- section: FRLONG
fr: Date en format long
en: Long format date
'calfr-48,calfr-50': 4
'calfr-dbg-48,calfr-dbg-50': 4
level: 3
- code: |
« \-> D
'calfr-dbg-48,calfr-dbg-50': 1
- code: |
« |N10R| \-> D N10R
'calfr-48,calfr-50': 1
- code: |
.
« { "Primi" "Duo" "Tri" "Quarti" "Quinti"
"Sexti" "Septi" "Octi" "Noni" "Déca" }
D 1 - 10 MOD 1 + GET "di " +
D 100 |MOD| + " " +
{ "Vendémiaire" "Brumaire" "Frimaire"
"Nivôse" "Pluviôse" "Ventôse"
"Germinal" "Floréal" "Prairial"
"Messidor" "Thermidor" "Fructidor"
"jour complémentaire" }
D 100 / IP 100 MOD GET + " " +
D 10000 / IP @N10R@ +
IF 'FRF' VTYPE 0 \>=
THEN
FRF D 100 MOD D 100 / IP 100 MOD 1 - 30 * + GET
DUP 1 1 SUB
{ " jour du " " jour de la " " jour de l'"
" jour des " }
SWAP NUM 47 - GET SWAP 2 30 SUB + +
END
»
»
- section: FRABR
fr: Date en format abrégé
en: Abbreviated format date
'calfr-48,calfr-50': 5
'calfr-dbg-48,calfr-dbg-50': 5
level: 3
- code: |
« \-> D
« D 100 |MOD| " " +
{ "VND" "BRU" "FRI" "NIV" "PLU" "VNT"
"GER" "FLO" "PRA" "MES" "THE" "FRU" "S-C" }
D 100 / IP 100 MOD GET +
" " + D 10000 / |IP| +
»
»
- section: IP
fr: Partie entière
en: Integer Part
- fr: |
Sur les HP-50, lorsque l'on prend la partie entière d'un nombre
réel, on n'obtient pas un nombre entier, on obtient un nombre réel
avec une partie décimale nulle. Converti en chaîne, il conserve
la virgule décimale. Pour éviter cela, il faut utiliser la fonction
<tt>R\->I</tt>. En revanche, sur les HP-48, la partie entière
donne un nombre entier, qui n'a pas de virgule lorsqu'on le convertit
en chaîne. Et sur les HP-48, la fonction <tt>R\->I</tt> n'existe pas.
- en: |
On the HP-50 calculators, taking the integer part of a real number
does not give an integer number, but a real number, the fractional
part of which is zero. And when converted to a string, this number
keeps its decimal comma. To prevent this, we have to use the
<tt>R\->I</tt> function. On the other side, on HP-48's, the integer
part of a real number is an integer, which has no comma when converted
to a string. In addition, the <tt>R\->I</tt> function does not exist
on HP-48's.
- code: IP R\->I
'calfr-50,calfr-dbg-50': 1
- code: IP
'calfr-48,calfr-dbg-48': 1
- section: MOD
'fr,en': Modulo
- fr: |
Idem pour la fonction modulo.
- en: |
Same thing for the modulus function
- code: MOD R\->I
'calfr-50,calfr-dbg-50': 1
- code: MOD
'calfr-48,calfr-dbg-48': 1
- section: MAINTENANT
fr: Date du jour
en: Current Date
'calfr-48,calfr-50': 1
'calfr-dbg-48,calfr-dbg-50': 1
level: 3
- fr: |
Routine qui affiche la date du jour et l'heure décimale.
- en: |
This code (translation for "NOW") prints the current
day and time.
- code: |
« DATE @GRFR@ @FRLONG@
" " + TIME @H24H10@ @PRH10@ + 21 @JUSTIF@ »
- section: 0
fr: Heure décimale
en: Decimal Time
- section: H24H10
'fr,en': Conversion H24 \-> H10
level: 3
'calfr-48,calfr-50': 6
'calfr-dbg-48,calfr-dbg-50': 6
- fr: |
La décimalisation des minutes et secondes en fractions
d'heures est une fonction standard du RPL. La décimalisation
des heures-minutes-secondes s'en déduit ensuite avec
une simple division.
- en: |
Decimalisation of minutes and seconds as fractions of hours
is a standard RPL function. The full decimalisation of hours,
minutes and seconds is therefore this function followed
by a simple division.
- code: |
« HMS\-> 2,4 / »
- section: H10H24
'fr,en': Conversion H10 \-> H24
level: 3
'calfr-48,calfr-50': 7
'calfr-dbg-48,calfr-dbg-50': 7
- fr: |
La fonction inverse de @H24H10@ ci-dessus.
- en: |
The inverse function as @H24H10@ above.
- code: |
« 2,4 * \->HMS »
- section: PRH10
fr: Affichage de l'heure décimale
en: Printing Decimal Time
'calfr-48,calfr-50': 8
'calfr-dbg-48,calfr-dbg-50': 8
level: 3
- fr: |
Affichage de l'heure décimale, sachant que le nombre
8,0317 doit donner "8:03:17", pas "8:3:17"
Cela peut servir également pour les heures habituelles,
si vous acceptez d'avoir des heures à un seul chiffre
jusqu'à "9:59:59", au lieu de "09:59:59".
- en: |
This code prints the decimal time, with the provision
that 8,0317 must give "8:03:17", not "8:3:17".
It works also for ordinary hours, provided you do not
mind having single-digit hours until "9:59:59", instead
of "09:59:59".
- code: |
« DUP |IP| ":" +
SWAP FP 100 * DUP |IP|
IF DUP 9 \<=
THEN "0" SWAP +
END
":" +
SWAP FP 100 * |IP|
IF DUP 9 \<=
THEN "0" SWAP +
END
+ +
»
- section: 0
fr: Outils annexes
en: Various Utilities
- section: N10R
fr: Nombres romains
en: Roman Numbers
level: 3
'calfr-dbg-48,calfr-dbg-50': 15
- fr: |
L'affichage traditionnel des années du calendrier
républicain utilise les chiffres romains. Voici la
routine de conversion.
- en: |
Traditionally, the years of the French calendar
are written with Roman numerals. Here is the conversion function.
- code: |
«
|NR| \-> \<-N NR
'calfr-48,calfr-50': 1
- code: |
« \-> \<-N
'calfr-dbg-48,calfr-dbg-50': 1
- code: |
.
«
IF \<-N 4000 <
THEN
""
1 3 START "M" 1000 @NR@ NEXT
"CM" 900 @NR@
"D" 500 @NR@
"CD" 400 @NR@
1 3 START "C" 100 @NR@ NEXT
"XC" 90 @NR@
"L" 50 @NR@
"XL" 40 @NR@
1 3 START "X" 10 @NR@ NEXT
"IX" 9 @NR@
"V" 5 @NR@
"IV" 4 @NR@
1 3 START "I" 1 @NR@ NEXT
ELSE
\<-N |IP| \->STR
END
»
»
- section: NR
level: 4
'calfr-dbg-48,calfr-dbg-50': 16
- fr: |
Le sous-programme <tt>NR</tt> a pour but
de transvaser une valeur du nombre indo-arabe
<tt>\<-N</tt> vers le nombre romain
(niveau 3 de la pile), après s'être assuré toutefois
que c'était justifié. Au niveau 2, on a la valeur
à transvaser en romain, au niveau 1 la même valeur
en indo-arabe.
- en: |
The subprogram <tt>NR</tt> removes a number
from the indo-arabic value (<tt>\<-N</tt> variable)
and adds it to the Roman value (in the stack, at level 3),
but checks first that is is allowed. In level 2, we have
the transferred value in Roman number and in level 1 we have
the same value in indo-arabic.
- code: |
« DUP
IF \<-N \<=
THEN '\<-N' SWAP STO- +
ELSE DROP2
END
»
- section: JUSTIF
fr: Justification de chaîne
en: String Justification
'calfr-48,calfr-50': 9
'calfr-dbg-48,calfr-dbg-50': 9
- fr: |
Cette routine n'a rien à voir intrinsèquement avec
le calendrier républicain. Elle permet d'assurer l'affichage
d'une chaîne pour une largeur d'écran donnée, en remplaçant
des espaces bien choisis par des sauts de ligne. Au niveau 2,
mettre la chaîne, au niveau 1, renseigner la largeur de
l'affichage.
- en: |
This routine is not closely linked with the French calendar.
It allows the proper display of a string in a screen with
a given width. For this, it replaces spaces with newlines.
The string is in level 2 and the width is in level 1.
- fr: |
<tt>I</tt> est l'indice du caractère courant, <tt>I10</tt>
l'indice du dernier saut de ligne rencontré et <tt>I32</tt>
l'indice du dernier espace rencontré. La condition pour
remplacer un blanc par un saut de ligne s'interprête
de la façon suivante :
- en: |
<tt>I</tt> is the index of the current character, <tt>I10</tt>
is the index of the last encountered linefeed and <tt>I32</tt>
is the index of the last encountered space. The condition
to replace a space by a linefeed consists of the following:
- fr: |
1<sup>er</sup> cas, il y a au moins un espace parmi les <tt>LG</tt>
premiers caractères de la ligne. En d'autres termes,
l'expression <tt>I32 I10 ></tt> est vraie. La substitution
s'effectue dès que <tt>I</tt> dépasse <tt>I10 LG +</tt>,
c'est-à-dire dès que <tt>I I10 - LG ></tt> devient vraie.
2<sup>me</sup> cas, il y a plus de <tt>LG</tt> caractères d'affilée sans espace.
Ce qui signifie que <tt>I I10 - LG ></tt> est vraie depuis
un certain temps. On effectue alors le remplacement
dès que l'on trouve un espace, c'est-à-dire lorsque
<tt>I I32 ==</tt> est vraie.
- en: |
First case, there is at least one space among the first <tt>LG</tt>
characters of the current line. In other words, the expression
<tt>I32 I10 ></tt> is true. The substitution is executed
as soon as <tt>I</tt> overcomes <tt>I10 LG +</tt>, that is,
as soon as <tt>I I10 - LG ></tt> turns true.
Second case, there are more than <tt>LG</tt> successive characters without any space.
That means that <tt>I I10 - LG ></tt> has been true
for some time. So we execute the substitution on the first space, that is,
when <tt>I I32 ==</tt> turns true.
- fr: |
Et en factorisant, on obtient la condition apparaissant
dans le programme. Lorsque l'on remplace un espace par
un saut de ligne, ne pas oublier de mettre à jour <tt>I10</tt>.
La valeur de <tt>I32</tt> n'est plus tout-à-fait correcte,
mais ce n'est pas très grave.
- en: |
And if you factorise these conditions, you obtain the condition
coded below. When we replace a space with a newline, we must
update <tt>I10</tt>. The value of <tt>I32</tt> is no longer
significant, but this is not a problem.
- code: |
« 0 0 10 CHR \-> CH LG I10 I32 NL
«
1 CH SIZE FOR
I CH I I SUB
CASE
DUP " " ==
THEN I 'I32' STO DROP
END
NL ==
THEN I 'I10' STO
END
END
IF I I10 - LG >
I32 I10 >
I I32 == OR AND
THEN
CH I32 NL REPL 'CH' STO
I32 'I10' STO
END
NEXT
CH
»
»
- section: SUBSG
fr: Substitution globale
en: Global Substitution
subsg: 1