-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathDATIME.MAC
1849 lines (1628 loc) · 52.1 KB
/
DATIME.MAC
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
;<134-TENEX>DATIME.MAC;13 27-JAN-75 12:45:38 EDIT BY CLEMENTS
; LATEST EPISODE IN THE SAGA OF WHEN WE HAVE DAYLIGHT TIME.
; NOTE THAT THE CODE NOW AGREES WITH THE LAW AS OF THIS DATE, FOR ALL
; POSSIBLE TIME INPUTS. THAT IS, THIS CODE KNOWS ALL THE OLD
; GLITCHES AND THE FUTURE ONES, AND CAN THUS BE INSTALLED AT ALL SITES.
; FURTHER CHANGE IS NEEDED IF CONGRESS DECIDES TO KEEP THE START
; OF SUMMER DST IN FEBRUARY. LAW NOW SAYS WE GO BACK TO APRIL IN '76.
; (ACTUALLY IT DOESN'T KNOW ABOUT WAR TIME" IN WW II, BUT
; OTHERWISE, IT'S RIGHT....)
;<133-TENEX>DATIME.MAC;12 26-OCT-74 12:48:46 EDIT BY CLEMENTS
; FIRST PART OF FIX FOR RETURN OF STANDARD TIME. FEBRUARY VS APRIL
; STILL NEEDS TO BE FIXED.
;<TENEX-132>DATIME.MAC;11 12-MAR-74 13:01:19 EDIT BY CLEMENTS
;FIX FOR FEB 29 IN NON-LEAP YEAR RESULTING FROM DAYLIGHT SAVINGS TIME
;<TENEX-132>DATIME.MAC;10 11-DEC-73 15:55:38 EDIT BY CLEMENTS
; FIXES TO DAYLIGHT SAVINGS TIME: 1) MOVE TIME OF SWITCH
; BACK FROM 4 AM TO 2 AM, AS LAW READS. 2) INCLUDE FORCED
; DAYLIGHT SAVINGS TIME FROM 6 JAN 74 THRU SUMMER OF 75.
;<TENEX-132>DATIME.MAC;9 16-MAY-73 19:07:29 EDIT BY CLEMENTS
; DEFAULT -1 TO ODTIM NOW IMPLIES TIMEZONE (B13)
;<TENEX-130>DATIME.MAC;8 28-DEC-72 15:49:59 EDIT BY CLEMENTS
; CHANGED HANDLING OF MIDNITE AND NOON TO BE ALGEBRAIC
;<TENEX-130>DATIME.MAC;7 7-DEC-72 14:06:16 EDIT BY TOMLINSON
; FIXED IDTNCS B0 _ B1 BUG
;<TENEX-130>DATIME.MAC;6 30-NOV-72 14:35:45 EDIT BY TOMLINSON
;<TENEX-130>DATIME.MAC;5 2-NOV-72 13:36:10 EDIT BY TOMLINSON
;<TENEXDLM>DATIME.MAC;4 26-OCT-72 11:10:01 EDIT BY TOMLINSON
;22 NOV 71, 1847:
;DATIME.MAC
;TIME AND DATE JSYS ROUTINES
; JRB BBN SEPT 1970
;JSYS'S HEREIN
; ODTIM
; IDTIM
; ODTNC
; IDTNC
; ODCNV
; IDCNV
;ASSEMBLE WITH STENEX.MAC
TITLE DATIME
SEARCH STENEX
INTERN TIMZON ;CELL TO PATCH TO RUN IN ANOTHER TIME ZONE
INTERN .ODTIM,.IDTIM,.ODTNC,.IDTNC,.ODCNV,.IDCNV ;JSYS'S
;INTERN ODTIMS,IDTIMS,ODTNCS,IDTNCS ;SUBR ENTRIES TO JSYS'S
EXTERN LSTERR,ITRAP,MENTR,MRETN
MLON
EXTERN BIN1 ;RST'S ROUTINE TO INPUT BYTE TO 2, SOURCE IN CALLER 1
EXTERN BOUTA ;OUTPUT LIKEWISE
EXTERN NOUTXX ;NUMBER OUTPUT LIKEWISE
EXTERN TMZONE
;PARAMETERS
TIMZON: TMZONE ;NUMBER OF HOURS LOCAL TIME LAGS GREENWICH
DWFUDG==2 ;CONSTANT TO NORMALIZE DAY OF WEEK
; = DAY OF WEEK OF 17 NOV 1858
;ACCUMULATORS
Z=0
A=1
B=2
C=3
D=4
E=5
F=6
G=7
AA=10
BB=11
CC=12
DD=13
EE=14
FF=15
GG=16
P=17
OPDEF CALL [PUSHJ P,]
OPDEF RET [POPJ P,]
;HALF-WORD BIT SYMBOLS
B0==1B18
B1==1B19
B2==1B20
B3==1B21
B4==1B22
B5==1B23
B6==1B24
B7==1B25
B8==1B26
B9==1B27
B10==1B28
B11==1B29
B12==1B30
B13==1B31
B14==1B32
B15==1B33
B16==1B34
B17==1B35
REPEAT 0, <
ODTIM
OUTPUT DATE AND TIME
CONVERTS INTERNAL DATE AND TIME TO TEXT
TAKES: 1: TENEX DESTINATION DESIGNATOR
2: LEFT HALF: INTERNAL DATE
RIGHT HALF: INTERNAL TIME
OR ENTIRE WORD -1 TO USE CURRENT DATE AND TIME
3: FORMAT FLAGS, DESCRIBED BELOW
RETURNS: +1 ALWAYS: UPDATED STRING POINTER (IF PERTINENT) IN 1.
GENERATES ILLEGAL INSTRUCTION PSEUDO-INTERRUPT ON
ERROR CONDITIONS GIVEN BELOW.
ODTIM FORMAT FLAGS (AC 3):
B0: OFF, OUTPUT DATE
ON, OMIT DATE AND IGNORE B1-B8
B1: ON, OUTPUT DAY OF WEEK
OFF, OMIT DAY OF WEEK AND IGNORE B4
B2: ON, USE FULL TEXT FOR WEEKDAY
OFF, USE 3-LETTER ABBREVIATION FOR WEEKDAY
B3: ON, OUTPUT MONTH AS NUMBER AND IGNORE B4
OFF, OUTPUT MONTH AS TEXT
B4: ON, USE FULL TEXT FOR MONTH
OFF, USE 3-LETTER ABBREVIATION FOR MONTH
B5: ON, OUTPUT 4-DIGIT YEAR
OFF, OUTPUT 2-DIGIT YEAR IF BETWEEN 1900 AND 1999
B6: ON, OUTPUT DAY OF MONTH AFTER MONTH
OFF, OUTPUT DAY OF MONTH BEFORE MONTH
B7 AND B8: DATE PUNCTUATION CONTROL:
BOTH OFF, PUNCTUATE WITH DASHES, AS 13-APR-70
B7 ON, PUNCTUATE WITH SPACES, AS 13 APR 70.
A COMMA IS ALSO USED IF B6 IS ON, AS APRIL 13, 1970
B8 ON, PUNCTUATE WITH SLASHES, AS 5/13/70
BOTH B7 AND B8 ON, UNSPECIFIED
B9: OFF, OUTPUT TIME
ON, OMIT TIME AND IGNORE B10-B13
B10: OFF, INCLUDE SECONDS, PRECEDED BY A COLON
ON, OMIT SECONDS
B11: OFF, USE 24-HOUR TIME
ON, USE 12-HOUR TIME AND AM-PM
B12: OFF, COLON BETWEEN HOURS AND MINUTES
ON, NO COLON
B13: OFF, NO TIME ZONE GARBAGE
ON, ADD "-" AND TIME ZONE TO TIME, EG "-EDT" OR "-PST"
B17: OFF, COLUMNATE: USE LEADING SPACES AND ZEROES SO THAT
TTME AND DATE PRINTOUT IS CONSTANT-WIDTH REGARDLESS OF THE
PARTICULAR DATE AND TIME (NOTE: FULL MONTH AND WEEKDAY TEXTS
ARE NOT COLUMNATED).
ON, DON'T COLUMNATE.
NOTE: COLUMNATION WILL GENERALLY BE DESIRED IF THE PRINTOUT
IS PART OF A TABLE, BUT NO COLUMNATION PRODUCES A
SLIGHTLY BETTER LOOKING PRINTOUT WHEN PART OF A SENTENCE.
FOR CONVENIENCE, -1 IN 3 IS TAKEN AS EQUIVALENT TO 336021000000,
WHICH PRODUCES, FOR EXAMPLE, FRIDAY, APRIL 13, 1970 1:06:03-EST .
EXAMPLES:
CONTENTS OF 3 TYPICAL TEXT
0 3-APR-70 1:06:03
202201000000 FRI 3 APR 70 1:06
336321000000 FRIDAY, APRIL 3, 1970 1:06AM-EST
041041000000 3/4/70 106:03
041040000000 3/04/70 106:03
ODTIM ERROR MNEMONICS:
STIMEX: SYSTEM HAS NO DATE AND TIME
TIMEX1: ILLEGAL TIME (GREATER THAN 24 HOURS)
ODCNV ERRORS (LIST THEM ALL HERE)
ODTNC ERRORS
FILE ERRORS
DESXN ERRORS
>
;NOTE: JSYS'S USING STRING I/O CANNOT BE NESTED BECAUSE STRING
;POINTER WOULD ALWAYS REFER TO MONITOR ADDR SPACE EVEN IF OUTER JSYS
;CALLED FROM USER SPACE.
;HENCE SUBROUTINE ENTRIES ARE USED FOR ODTNC AND IDTNC WHEN USED
;IN ODTIM AND IDTIM, AND SUBROUTINE ENTRIES ARE ALSO PROVIDED
;TO ODTIM AND IDTIM FOR USE ELSEWHERE IN THE MONITOR.
;ODTIM JSYS
.ODTIM: JSYS MENTR ;BECOME SLOW, ETC.
CALL ODTIMS ;ODTIM SUBROUTINE
JRST MRETN ;RETURN TO CALLER
;ODTIM SUBROUTINE, FOR ODTIM JSYS
; AND POSSIBLE OTHER FUTURE USES IN MONITOR INVOLVING STRING
; IN USER SPACE.
;TAKES: CALLER'S A: DESTINATION
; ACTUAL B: DATE & TIME OR -1
; ACTUAL C: FORMAT OPTION FLAGS
;RETURNS +1: WITH CALLERS A UPDATED (IF STRING POINTER)
;CLOBBERS MOST OR ALL OF AC'S B-DD.
ODTIMS: PUSH P,C ;SAVE FORMAT OPTION FLAGS
SETZ D, ;DEFUALT ZONE & DAYLIGHT STUFF
ODCNV ;CONVERT INTERNAL TO LOCAL DATE & TIME
POP P,F ;GET FORMAT OPTION FLAGS BACK INTO F
CALL ODTNCS ;SUBR ENTRY TO ODCNV JSYS (BELOW)
;CONVERTS LOCAL DATE & TIME TO STRING
RET ;RETURN
REPEAT 0, <
IDTIM
INPUT DATE AND TIME
CONVERTS TEXT TO INTERNAL DATE AND TIME
TAKES: 1: TENEX SOURCE DESIGNATOR
2: FORMAT OPTION FLAGS, DESCRIBED BELOW, 0 FOR NORMAL CASE
RETURNS: +1: FAIL, ERROR NUMBER IN 2,
UPDATED STRING PTR (IF PERTINENT) IN 1
+2: SUCCESS, 1: UPDATED STRING PTR (IF PERTINENT)
2: LH: DATE IN SYSTEM INTERNAL FORMAT (GREENWICH)
RH: TIME IN SYSTEM INTERNAL FORMAT
(GREENWICH MEAN TIME)
IDTIM DOES NOT ADMIT OF DOING CONVERSIONS FOR OTHER THAN THE
LOCAL TIME ZONE OR FOR DAYLIGHT SAVINGS TIME IF APPROPRIATE, EXCEPT IF
THE INPUT STRING CONTAINS A TIME ZONE CODE. HOWEVER, THE CALLER MAY
ADD OR SUBTRACT HOURS TO ADJUST TO OTHER TIME ZONES; HE MAY
DETERMINE THE LOCAL TIME ZONE USING "ODCNV" (BELOW).
IDTIM DOES NOT ADMIT OF INPUTTING EITHER THE DATE OR THE TIME ALONE.
SEE IDTNC, BELOW, FOR THIS.
IDTIM FORMAT OPTIONS (AC 2):
B1: ON, DISALLOW NUMERIC MONTH IN INPUT AND IGNORE B2-B3
B2: OFF, IF MONTH IS NUMERIC, AS IN "1/2/70", CONSIDER
THE FIRST NUMBER TO BE THE MONTH
ON, CONSIDER THE SECOND NUMBER TO BE THE MONTH. IE "1/2/70"
MEANS 1 FEB NOT JAN 2, AS IS CUSTOMARY IN ENGLAND.
B3: OFF, IF AN INVALID DATE CAN BE INTERPRETED SUCESSFULLY BY
ASSUMING MONTH AND DAY ARE IN OPPOSITE ORDER THAN
THAT SPECIFIED BY B2, INTERPRET IT THUS.
THIS WOULD APPLY, FOR EXAMPLE, TO "31/1/70" WITH B2 OFF.
ON, GIVE AN ERROR RETURN FOR SUCH DATES.
B7 AND B8 GOVERN INCLUSION OF SECONDS (PRECEDED BY COLON)
IN TIME.
BOTH OFF, SECONDS ARE OPTIONAL.
B7 ON, SECONDS ILLEGAL.
B8 ON, SECONDS MANDATORY.
B9 AND B10 GOVERN USE OF COLON BETWEEN HOURS AND MINUTES.
BOTH OFF, OPTIONAL
B9 ON, ILLEGAL.
B10 ON, MANDATORY.
B11 AND B12: WHEN BITS 7 THRU 10 ARE ALL OFF, THESE
BITS DETERMINE WHETHER A TIME WITH ONE COLON IS
INTERPRETED AS HOURS AND MINUTES OR HOURS, MINUTES,
AND SECONDS WITH NO COLON BETWEEN THE FORMER.
BOTH OFF, TAKE AS HH:MOVEM IF FIRST FIELD IS SMALL ENOUGH,
ELSE AS HHMM:SS.
B11 ON, ALWAYS TAKE AS HHMM:SS.
B12 ON, ALWAYS TAKE AS HH:MOVEM (GIVING AN ERROR IF
FIRST FIELD IS TOO BIG). THIS DIFFERS FROM
B7 ON IN THAT SECONDS CAN BE INCLUDED IF
PRECEDED BY A SECOND COLON.
B14: ON TO DISALLOW 24-HOUR TIME AND MAKE AM-PM MANDATORY
B15: ON TO DISALLOW AM-PM
B16: ON TO DISALLOW TIME ZONE
IDTIM ERROR MNEMONICS
IDTNC ERRORS
IDCNV ERRORS
FILE ERRORS
DESXN ERRORS
>
;IDTIM JSYS
.IDTIM: JSYS MENTR
CALL IDTIMS ;IDTIM SUBROUTINE
JRST [ UMOVEM B,B ;ERROR. RETURN CODE IN B
JRST MRETN] ;RETURN +1.
UMOVEM B,B ;RETURN INTERNAL DATE & TIME IN B
AOS (P) ;RETURN +2
JRST MRETN
;IDTIM SUBROUTINE, FOR IDTIM JSYS AND POSSIBLE OTHER USES
; (SEE NOTES WITH ODTIM)
;TAKES: CALLERS A: SOURCE
; ACTUAL B: FORMAT OPTION FLAGS
;RETURNS +1: ERROR CODE IN ACTUAL B, CALLERS A UPDATED
; +2: DATE & TIME IN ACTUAL B, CALLERS A UPDATED
;CLOBBERS C-DD.
IDTIMS: CALL IDTNCS ;SUBR ENTRY TO IDCNV JSYS (BELOW)
;INPUTS DATE & TIME AND RETURNS AS LOCAL NUMBERS
RET ;ERROR. # IN B.
IDCNV ;CONVERT LOCAL TO INTERNAL
RET ;ERROR, # IN B.
AOS (P)
RET
;ODTNC
; OUTPUT DATE AND/OR TIME WITHOUT CONVERSION FROM INTERNAL
;A SUBSET OF ODTIM, USED INTERNALLY BY ODTIM.
;TAKES: 1: TENEX DESTINATION DESIGNATOR
; 2: LH: REAL YEAR
; RH: MONTH (JANUARY=0)
; 3: LH: DAY OF MONTH
; RH: DAY OF WEEK IF PRINTOUT THEREOF REQUESTED
; 4: LH: NEEDED ONLY IF TIME ZONE PRINTOUT REQUESTED:
; B1: ON FOR DAYLIGHT SAVINGS
; B12-17: TIME ZONE
; RH: LOCAL TIME (SECONDS SINCE MIDNITE)
; 5: FORMAT OPTION FLAGS, SAME AS FOR ODTIM (ABOVE).
; NOTE: THE ONLY TIME ZONES WHICH CAN BE PRINTED (FLAG B13)
; ARE THOSE IN THE USA AND GREENWICH.
;RETURNS +1 WITH UPDATED STRING POINTER (IF PERTINENT) IN 1.
;TRAPS ON ERRORS.
;ERROR MNEMONICS
;DATEX1: ILLEGAL YEAR
;DATEX2: MONTH TOO LARGE
;DATEX3: DAY OF MONTH TOO LARGE
;DATEX4: DAY OF WEEK TOO LARGE
;ZONEX1: ILLEGAL TIME ZONE VALUE (NOT BETWEEN -12 AND 12)
;ODTNX1: UNPRINTABLE TIME ZONE
;FILE ERRORS
;DESXN ERRORS
;ODTNC JSYS
.ODTNC: JSYS MENTR
UMOVE F,E
CALL ODTNCS ;CALL ODTNC SUBROUTINE (NEXT IN LISTING)
JRST MRETN
;ODTNCS
;ODTNC SUBROUTINE FOR ODTNC AND ODTIM JSYS'S
;CALL: ALL AC'S ARE ACTUAL EXCEPT THOSE NOTED AS "CALLER" WHICH ARE
; USER IF LAST JSYS WAS FROM USER SPACE.
;TAKES: CALLER A: DESTINATION
; B: YEAR,,MONTH
; C: MONTHDAY,,WEEKDAY
; D: TIME STUFF
; F: FORMAT OPTION FLAGS
;RETURNS +1: ON SUCCESS WITH CALLER A UPDATED,
; B-E,G,AA,BB,DD CLOBBERED
;TRAPS ON ERRORS
;INTERNAL AC USE
; D,E,AA: ARGS FROM B,C,D
; BB: LOCAL TIME FROM RH D, LH 0.
ODTNCS: MOVE DD,P ;SAVE PD LEVEL TO RESTORE BEFORE ERROR RETURN
CAMN F,[-1]
HRLZI F,336021 ; DEFAULT FORMAT FOR -1
MOVE AA,D ;TIME STUFF TO AA
MOVEI BB,(D) ;TIME ONLY, WITH LH 0, TO BB
CALL CKYMDT ;CHECK MOST ARGUMENTS. THIS SUBR IS WITH
;"IDCNV" BELOW. USES B,C,AA.
JRST ODTNCE ;BAD ARGUMENT. ERROR CODE IN B.
MOVE D,B ;LOCAL YEAR,,LOCAL MONTH TO D.
MOVE E,C ;LOCAL DAY OF MONTH,,DAY OF WEEK TO E.
MOVEI G,^D10 ;SET G FOR USE IN C FOR MOST NOUTS: DECIMAL,
TLNN F,B17 ;COLUMNATION SUPPRESSED?
HRLI G,B2+2 ;NO, 2 COLUMNS, LEADING SPACE.
TLNE F,B0 ;ARE WE GOING TO PRINT DATE?
JRST OTT1 ;NO, DATE SUPPRESSION REQUESTED.
;ODTNCS...
;DATE
TLNN F,B1
JRST ODB2
;DAY OF WEEK
HRRZ B,E
CAIL B,7
JRST [ MOVEI B,DATEX4 ;"DAY OF WEEK TOO LARGE"
JRST ODTNCE]
HRROI B,[ASCIZ /MON/
ASCIZ /TUE/
ASCIZ /WED/
ASCIZ /THU/
ASCIZ /FRI/
ASCIZ /SAT/
ASCIZ /SUN/](E)
TLNE F,B2 ;ON FOR VERBOSE
HRRO B,[[ASCIZ /MONDAY,/]
[ASCIZ /TUESDAY,/]
[ASCIZ /WEDNESDAY,/]
[ASCIZ /THURSDAY,/]
[ASCIZ /FRIDAY,/]
[ASCIZ /SATURDAY,/]
[ASCIZ /SUNDAY,/] ] (E)
CALL SOUTA
MOVEI B," " ;ALWAYS A SPACE AFTER WEEKDAY
CALL BOUTA
;ODTNCS...
;DAY # IF BEFORE MONTH
ODB2: TLNE F,B6
JRST ODB3
HLRZ B,E
ADDI B,1 ;REAL DAY IS ARG +1.
MOVE C,G
CALL NOUTXX
;SEPERATOR
CALL ODTMSP ;DASH, SPACE, OR SLASH, DEPENDING ON FLAGS.
;MONTH
ODB3: TLNN F,B3
JRST ODB3A
;MONTH AS NUMBER
HRRZ B,D
ADDI B,1
MOVE C,G ;NOUT FORMAT
TLNN F,B6 ;IF DAY # WAS FIRST,
TLO C,B3 ;USE LEADING 0 NOT SPACE FOR MONTH
CALL NOUTXX ;MONTH
JRST ODB3B
;MONTH AS CONCISE OR VERBOSE TEXT
ODB3A: HRROI B,[ASCIZ /JAN/
ASCIZ /FEB/
ASCIZ /MAR/
ASCIZ /APR/
ASCIZ /MAY/
ASCIZ /JUN/
ASCIZ /JUL/
ASCIZ /AUG/
ASCIZ /SEP/
ASCIZ /OCT/
ASCIZ /NOV/
ASCIZ /DEC/ ] (D)
TLNE F,B4 ;ON FOR VERBOSE
HRRO B,[[ASCIZ /JANUARY/]
[ASCIZ /FEBRUARY/]
[ASCIZ /MARCH/]
[ASCIZ /APRIL/]
[ASCIZ /MAY/]
[ASCIZ /JUNE/]
[ASCIZ /JULY/]
[ASCIZ /AUGUST/]
[ASCIZ /SEPTEMBER/]
[ASCIZ /OCTOBER/]
[ASCIZ /NOVEMBER/]
[ASCIZ /DECEMBER/] ] (D)
CALL SOUTA
;SEPERATOR
ODB3B: CALL ODTMSP ;DASH, SLASH, OR SPACE PER FLAGS
;ODTNCS...
;DAY OF MONTH IF AFTER MONTH
TLNN F,B6
JRST ODB5
HLRZ B,E
ADDI B,1
MOVE C,G
TLNE F,B3 ;IF MONTH WAS NUMBER,
TLO C,B3 ;USE LEADING 0 NOT SPACE
CALL NOUTXX
;SEPERATOR: FIRST A COMMA IF MONTH WAS VERBOSE TEXT
TLNN F,B3
TLNN F,B4
JRST .+3
MOVEI B,","
CALL BOUTA
CALL ODTMSP ;DASH, SLASH, OR SPACE PER FLAGS
;YEAR
ODB5: HLRZ B,D
TLNE F,B5
JRST ODB5A ;VERBOSE YEAR REQUESTED
IDIVI B,^D100 ;SEPERATE CENTURY AND YEAR WITHIN CENTURY
EXCH B,C ;CONCISE YEAR: LAST 2 DIGITS ONLY
CAIE C,^D19
HLRZ B,D ;MAKE YEAR ALWAYS VERBOSE IF NOT 19XX
ODB5A: MOVE C,[1B2+1B3+2B17+^D10] ;NOUT FORMAT: 2 COLS, LEADING 0S.
CAIL B,^D100
HRLI C,B2+B3+4 ;BUT USE 4 COLS IF VERBOSE
CALL NOUTXX
;SPACE BETWEEN DATE AND TIME,
;NOT PRINTED IF EITHER IS SUPPRESSED.
TLNE F,B9
JRST OTT1
MOVEI B," "
CALL BOUTA
;ODTNCS...
OTT1: TLNE F,B9
JRST ODT8 ;TIME SUPPRESSED
;TIME
MOVEI D,(BB) ;MASK RH: LOCAL TIME IN MIUTES SINCE MIDNITE
IDIVI D,^D3600
MOVE B,D
TLNN F,B11 ;PRINTING 12-HOUR TIME?
JRST OTT2 ;NO
CAIGE B,1 ;12-HOUR PRINTOUT IS ALWAYS BETWEEN 1:00:00
ADDI B,^D12 ;...AND 12:59:59. SO ADD 12 IF BEFORE 1:00:00
CAILE B,^D12
SUBI B,^D12 ;SUBTRACT 12 HOURS IF AFTER 12:59:59
OTT2: MOVE C,G ;NOUT FORMAT SET UP AT ENTRY TO ODTIM.
TLNN F,B11 ;PRINTING AM/PM?
TLO C,B2+B3+2 ;NO. SO USE LEADING 0 ON HOURS TOO
CALL NOUTXX ;PRINT HOURS
MOVEI B,":"
TLNN F,B12 ;COLON REQUESTED BETWEEN HOURS AND MINUTES?
CALL BOUTA ;YES
MOVE D,E
IDIVI D,^D60
MOVE B,D
TLO C,B2+B3+2 ;ALWAYS LEADING 0 ON MINUTE AND SECONDS
CALL NOUTXX ;PRINT MINUTES
TLNE F,B10
JRST OTT4 ;SECONDS SUPPRESSED
MOVEI B,":"
CALL BOUTA ;SECONDS ARE ALWAYS PRECEDED BY COLON
MOVE B,E
CALL NOUTXX ;SECONDS
;ODTNCS...
OTT4: TLNN F,B11 ;12-HOUR TIME REQUESTED?
JRST OTT5 ;NO
HRROI B,[ASCIZ /AM/] ;YES, PRINT AM, PM, N, OR M.
CAIL BB,^D<12*3600>
HRROI B,[ASCIZ /PM/]
CAIN BB,^D<12*3600>
HRROI B,[ASCIZ /N/] ;"N" FOR NOON
CAIN BB,0
HRROI B,[ASCIZ /M/] ;"M" FOR MIDNITE
CALL SOUTA
OTT5: TLNN F,B13 ;PRINTING TIME ZONE REQUESTED?
JRST OTT6 ;NO
LDB E,[POINT 6,AA,17] ;TIME ZONE
JUMPE E,[HRROI B,[ASCIZ /-GMT/]
TLNE AA,B1 ;B1 OF ARG FROM D ON FOR DAYLIGHT
HRROI B,[ASCIZ /-GDT/] ;"GREENWICH DAYLIGHT TIME" !?
JRST OTT5A]
CAIG E,^D8 ;IS TIME ZONE IN RANGE FOR WHICH WE HAVE TEXTS?
CAIGE E,5
JRST [ MOVEI B,ODTNX1 ;"UNPRINTABLE TIME ZONE"
JRST ODTNCE]
HRROI B,[ASCIZ /-EST/
ASCIZ /-CST/
ASCIZ /-MST/
ASCIZ /-PST/ ] -5 (E) ;PICK UP STANDARD TIME ZONE TEXT
TLNE AA,B1 ;DAYLIGHT SAVINGS IN EFFECT FOR THIS DATE?
HRROI B,[ASCIZ /-EDT/
ASCIZ /-CDT/
ASCIZ /-MDT/
ASCIZ /-PDT/] -5 (E) ;GET DAYLIGHT TEXT
OTT5A: CALL SOUTA
OTT6: TLNE F,B11 ;12-HOUR TIME REQUESTED?
TLNE F,B17 ;COLUMNATION SUPPRESSED?
JRST OTT9 ;NO OR YES
;IF N FOR NOON OR M FOR MIDNITE PRINTED WITH COLUMNATION,
;PRINT SPACE AFTER TIME ZONE, BECAUSE SPACE BEFORE TIME ZONE
;IS A FORMAT THAT CAN'T BE TYPED INTO "IDTIM".
MOVEI B," "
CAIE BB,^D<12*3600>
CAIN BB,0
CALL BOUTA
OTT9:
;ODTNCS...
;EXIT
ODT8: RET
ODTNCC: MOVE B,C ;HERE WHEN ERROR CODE IS IN C, AS AFTER "NOUT"
;ODTNC ERROR RETURN. ERROR CODE IN B.
ODTNCE: MOVEM B,LSTERR ;SAVE ERROR CODE IN PSB FOR "GETER"
MOVE P,DD ;CLEAR PD
JRST ITRAP
;SUBROUTINE TO OUTPUT APPROPRIATE SEPERATOR PER FLAGS 7 AND 8.
ODTMSP: MOVEI B,"-"
TLNE F,B7
MOVEI B," "
TLNE F,B8
MOVEI B,"/"
JRST BOUTA
;SOUTA
;MONITOR TO CALLER'S ADDRESS SPACE STRING OUTPUT SUBROUTINE
;FOR ODTNCS
;B POINTS TO SOURCE STRING; LH -1 => 440700
;CALLERS A IS DESTINATION. BOTH ARE UPDATED.
SOUTA: PUSH P,C
HLRZ C,B
CAIN C,-1
HRLI B,<POINT 7,0,-1>B53
MOVE C,B
SOUTA1: ILDB B,C
JUMPE B,[MOVE B,C
POP P,C
RET]
CALL BOUTA
JRST SOUTA1
REPEAT 0, <
IDTNC
INPUT DATE AND/OR TIME WITHOUT CONVERSION TO INTERNAL
THIS JSYS IS A SUBSET OF IDTIM AND WILL ONLY BE OF INTEREST TO THOSE
WHO WISH TO INPUT THE DATE AND TIME WITHOUT CONVERTING TO
INTERNAL, OR WHO WISH TO INPUT THE TWO QUANTITIES SEPERATELY, EG
BECAUSE OF INTERVENING TYPEOUT. (IDTIM CANNOT iNPUT EITHER
ALONE BECAUSE IT IS IMPOSSIBLE TO CONVERT ONE TO INTERNAL WITHOUT
THE OTHER.) IDTNC RETURNS VALUES SUITABLE FOR USE AS ARGUMENTS TO
IDCNV. IDTNC IS USED INTERNALLY BY IDTIM.
TAKES: 1: TENEX SOURCE DESIGNATOR
2: FORMAT OPTION FLAGS, DESCRIBED BELOW
RETURNS: +1: FAILURE, ERROR CODE IN 1,
UPDATED STRING POINTER (IF PERTINENT) IN 4
+2: SUCCESS, VALUES IN ACCUMULATORS:
1: UPDATED STRING POINTER IF PERTINENT
IF DATE INPUT WAS NOT SUPPRESSED:
2: LH: REAL YEAR
RH: MONTH (JANUARY=0)
3: LH: DAY OF MONTH (FIRST DAY=0)
RH: DAY OF WEEK (MONDAY=0)
IF TIME INPUT WAS NOT SUPPRESSED:
4: RH: TIME AS SECONDS SINCE MIDNIGHT
LH: B0: OFF UNLESS A TIME ZONE WAS INPUT
B1: ON IF A DAYLIGHT SAVING TIME ZONE
(EG EDT) WAS INPUT.
B2: OFF UNLESS A TIME ZONE WAS INPUT
B12-17: TIME ZONE, IF ONE WAS INPUT, ELSE
LOCAL TIME ZONE.
(SEE DESCRIPTION OF TIME ZONeS UNDER
IDCNV)
(REDUNDANT BITS B0 AND B2 ARE FOR
COMPATIBILITY WITH ODCNV)
IDTNC FORMAT OPTION FLAGS (AC 2):
ALL OF THOSE DESCRIBED ABOVE UNDER IDTIM APPLY, AND ALSO:
B0 ON, DON'T INPUT DATE, IGNORE B1-B3
B6 ON, DON'T INPUt TIME, IGNORE B8-B16
IDTNC ERROR MNEMONICS:
DILFX1: ILLEGAL FORMAT FOR DATE
TILFX1: ILLEGAL FORMAT FOR TIME
NOTE: IDTNC DOES NOT DETECT CERTAIN ERRORS IN DATE INPUT, SUCH AS
DAY 31 OF A 30-DAY MONTH. SUCH ERRORS ARE DETECTED IN IDCNV.
>
;IDTNC JSYS
.IDTNC: JSYS MENTR
CALL IDTNCS ;IDTNC SUBROUTINE, NEXT
JRST [ UMOVEM B,B ;ERROR, RETURN CODE IN CALLER'S B.
JRST MRETN] ;RETURN +1
UMOVEM B,B ;RETURN RESULTS
UMOVEM C,C
UMOVEM D,D
AOS (P) ;SKIP
JRST MRETN
;IDTNCS
;IDTNC SUBROUTINE, FOR IDTIM AND IDTNC JSYS'S
;CALL SAME AS JSYS EXCEPT ALL AC'S ACTUAL EXCEPT A IS CALLER
; (IE CALLER OF JSYS THAT CALLS SUBROUTINE)
;CLOBBERS B-DD.
;IDTNC INTERNAL AC USE
; A: SOURCE DESIGNATOR
; B,C,D,E: TEMPS
; F: FLAGS
; G: LAST CHARACTER READ
; AA, BB, CC: WHAT WILL BE RETURNED IN B, C, D
; DD: SAVED P
;IDTNCS
IDTNCS: MOVE DD,P ;SAVE P: USED WHEN MAKING AN ERROR RETURN
MOVE F,B ;FLAGS REMAIN IN F THROUGHOUT
MOVEI G," " ;G CONTAINS CHARACTER: PRESET TO SPACE SO
;"GNSC" SUBR WILL READ FIRST CHARACTER
TLNE F,B0 ;ON TO SUPPRESS DATE INPUT
JRST ITN1 ;DATE INPUT SUPPRESSED
;INPUT DATE
CALL MONTH ;TRY INPUTTING ALPHA MONTH
JRST IDN2 ;NOT A LETTER, GO TRY NUMBER
;PROCESS REST OF DATE WHICH BEGINS WITH ALPHABETIC MONTH
CALL DNIN ;INPUT NUMBER FOR DAY OF MONTH -1 INTO B
HRL BB,B ;RETURN DAY OF MONTH IN LH C
CALL GNSC ;NON-SPACE CHARACTER
CAIN G,"," ;COMMA ALLOWED IN THIS CONTEXT ONLY
JRST [ CALL IDCHAR ;PASS THE COMMA. "YEAR" PASSES SPACES.
JRST .+2]
CALL IDSEP ;SEPERATING DASH OR SLASH AND SPACES
CALL YEAR ;INPUT YEAR
JRST IDN7
;DATE MUST BEGIN WITH A NUMBER
IDN2: CALL DNIN ;READ NUMBER: VALUE-1 TO B
HRL BB,B ;STORE VALUE IN DAY OF MONTH
CALL IDSEP ;SEPERATING DASH OR SLASH AND SPACES
CALL MONTH ;ALPHANUMERIC MONTH NEXT?
JRST IDN3 ;NO, GO TRY NUMBER
CALL YEAR ;INPUT YEAR
JRST IDN7
;IDTNCS...
;SECOND FIELD OF DATE MUST ALSO BE A NUMBER
IDN3: TLNE F,B1 ;NUMERIC MONTH ALLOWED?
JRST IDILF ;NO, "ILLEGAL FORMAT" ERROR
CALL DNIN ;GET SECOND NUMBER -1 INTO B.
HLRZ C,BB ;FIRST NUMBER TO C
TLNE F,B2 ;IS FIRST NUMBER SUPPOSED TO BE MONTH?
EXCH C,B ;NO, SWAP. MONTH TO C, DAY TO B.
CAIG C,^D11 ;IS "MONTH" TOO LARGE
JRST IDN4 ;OK
CAIG B,^D11 ;IS OTHER NUMBER ALSO TO LARGE TO BE MONTH?
TLNE F,B3 ;WILL CALLER LET US SWAP THEM?
JRST IDILF ;YES OR NO, ERROR.
EXCH B,C
IDN4: HRR AA,C ;RETURN MONTH IN RH B
HRL BB,B ;RETURN DAY IN RH C
CALL IDSEP ;SEPERATING SPACES, DASH OR SLASH, SPACES.
CALL YEAR ;GET YEAR
IDN7: TLNE F,B6 ;ON TO SUPPRESS TIME INPUT
JRST IDTNC8 ;TIME INPUT SUPPRESSED
;SEPERATOR BETWEEN DATE AND TIME: ONE TAB, ANY NUMBER OF SPACES.
CALL GNSC
CAIN G,11 ;ASCII TAB
CALL IDCHAR
;IDTNCS...
;INPUT TIME
ITN1: TLNE F,B6
JRST IDTNC8 ;BOTH TIME AND DATE SUPPRESSED, JSYS IS NOP.
SETZ E, ;ZERO FOR SECONDS IF OMITTED
CALL IDNIN ;PASS SPACES, READ NUMBER
JRST ITILF ;NO NUMBER, "ILLEGAL FORMAT FOR TIME" ERROR
PUSH P,B
;THIS NUMBER MAY BE HOURS OR HOURS AND MINUTES.
CAILE B,^D2400 ;BUT CAN NEVER BE GREATER THAN 2400.
JRST ITILF
;MAKE SURE MINUTES PART OK (THIS ALWAYS SUCCEEDS IF ITS
;JUST HOURS)
IDIVI B,^D100
CAIL C,^D60
JRST ITILF
;DON'T CHECK HOURS PART YET - ITS MAX VALUE DEPENDS ON
;MANY THINGS INCLUDING FOLLOWING INPUT, AND THIS FIELD
;(ONLY) CAN BE CHECKED AFTER CASES CONVERGE AND VALUES ARE
;COMBINED.
POP P,C ;FIRST VALUE IN C
CAIE G,":" ;COLON AFTER NUMBER?
JRST ITN4 ;NO, ONLY ONE NUMBER IN INPUT.
;COLON SEEN IN TIME, THERE WILL BE AT LEAST TWO NUMBERS
TLNE F,B7 ;SECONDS ILLEGAL?
TLNN F,B9 ;COLON ILLEGAL BETWEEN HRS AND MINS ALSO?
JRST .+2
JRST ITILF ;BOTH TRUE, NO COLONS ALLOWED
CALL TNIN ;PASS SPACES, READ NUMBER <60.
MOVE D,B ;VALUE OF SECOND NUMBER IN D
CAIE G,":"
JRST ITN5 ;TIME CONSISTS OF TWO NUMBERS
;SECOND COLON SEEN, THERE WILL BE THREE NUMBERS
TLNN F,B7 ;SECONDS ILLEGAL?
TLNE F,B9 ;COLON ALLOWED BETWEEN HOURS AND MINS?
JRST ITILF ;TWO COLONS NOT ALLOWED
CALL TNIN ;PASS SPACES, READ THIRD NUMBER
MOVE E,B ;THIRD VALUE IN E
JRST ITN7 ;GO COMBINE VALUES
;ONLY ONE NUMBER IN TIME
ITN4: TLNN F,B10 ;COLON MANDATORY BETWEEN HOURS AND MINS?
TLNE F,B8 ;SEcONDS MANDATORY?
JRST ITILF
JRST ITN5B ;GO SEPERATE HOURS AND MINUTES.
;SECONDS ALREADY ZEROED.
;IDTNCS...
;TWO NUMBERS IN TIME
ITN5: TLNE F,B8 ;SECONDS REQUIRED?
TLNN F,B10 ;COLON REQUIRED BETWEEN HOURS AND MINUTES?
JRST .+2
JRST ITILF ;YES AND YES, TWO COLONS REQUIRED.
TLNN F,B9 ;COLON ILLEGAL?
TLNE F,B8 ;SECONDS REQUIRED?
JRST ITN5A ;YES OR YES, TAKE IT AS HHMM:SS
TLNN F,B7 ;SECONDS ILLEGAL?
TLNE F,B10+B12 ;COLON REQ'D OR "TAKE AS HH:MM IF B7-10 OFF"?
JRST ITN7 ;YES, YES, OR YES, TAKE AS HH:MM
TLNE F,B11 ;"TAKE AS HHMM:SS IF B7-B10 OFF"?
JRST ITN5A ;YES. THIS TEST MUST BE AFTER B7-10!
;B7-B12 ALL OFF, TAKE AS HH:MM IF POSSIBLE, ELSE HHMM:SS.
;WE MUST SEE WHETHER AM-PM IS PRESENT TO KNOW MAXIMUM
;HOUR VALUE IN ORDER TO DECIDE WHETHER WE CAN TAKE IT AS
;HH:MM.
TLNE F,B14
JRST ITN58 ;24-HOUR TIME ILLEGAL, 12 HOURS.
TLNE F,B15
JRST ITN59 ;AM-PM ILLEGAL, 24 HOURS.
CAIG G,"Z"
CAIGE G,"A"
JRST ITN59 ;NO LETTER, NO AM-PM.
ITN58: CAILE C,^D12 ;AM-PM WILL BE PRESENT, MAX TIME 12:59.
JRST ITN5A ;HOURS TOO BIG, HHMM:SS.
;JRST ITN7 ;HH:MM. FALLING THRU WILL GET TO ITN7.
ITN59: CAIN C,^D24 ;NO AM-PM, MAX TIME 24:00
JUMPE D,ITN7 ;HOURS=24, HH:MM IF MINS =0.
CAIGE C,^D24
JRST ITN7 ;FIRST NUMBER SMALL ENOUGH FOR HH:MM.
;TWO NUMBERS IN TIME, TO BE TAKEN AS HHMM:SS
ITN5A: MOVE E,D ;SECONDS
ITN5B: IDIVI C,^D100 ;SEPERATE HOURS AND MINUTES.
;COMBINE HOURS, MINUTES, SECONDS INTO C.
ITN7: IMULI C,^D60
ADD C,D
IMULI C,^D60
ADD C,E
CAILE C,^D<24*3600> ;MAX VALUE IN ANY CASE
JRST ITILF
TLNE F,B14 ;24-HOUR TIME DISALLOWED?
JRST ITN8 ;YES, AM-PM MANDATORY.
TLNE F,B15 ;AM-PM ALLOWED?
JRST ITN9 ;NO
CAIG G,"Z" ;AM-PM OPTIONAL. LETTER NEXT?
CAIGE G,"A" ;..
JRST ITN9 ;NO
;IDTNCS...
;INPUT AM-PM AND MAKE APPROPRIATE CHECKS AND ADJUSTMENTS TO YIELD
;24-HOUR TIME.
;THE TIMES PRECEDING AM-PM MUST BE BETWEEN 1:00:00 AND 12:59:59.
ITN8: CAIG C,^D<<12*60+59>*60+59>
CAIA C,^D3600 ;NO, ALSO ALLOW 0:00:00 TO 0:59:59
JRST ITILF
CALL AMPM ;READ STRING, SEARCH TABLE, RETURN +1 - +4.
JRST [ CAILE C,^D<12*3600> ;+1: AM
SUBI C,^D<12*3600> ;12AM=NOON, AFTER 12=MORNING
JRST .+4]
JRST [ CAIG C,^D<12*3600> ;+2: PM
ADDI C,^D<12*3600> ;BEFORE 12=AFTERNOON, 12PM=MIDNITE
JRST .+3]
JRST [ CAIE C,^D<12*3600> ;+3: NOON
JRST ITILF ;ONLY 12 NOON ALLOWED
JRST .+2]
JRST [ CAIE C,^D<12*3600> ;+4: MIDNITE
JRST ITILF
JRST .-2] ;GO ADD 12 HOURS
;ABOVE MANIPULATIONS CAN MAKE MIDNITE COME OUT 24:00:00
;AS OPPOSED TO 0:00:00. THE FOLLOWING FIXES THAT,
;AND ALSO CHANGES 24:00:00 (WHICH IS OK TO INPUT WITHOUT
;AM-PM) TO 0.
ITN9: REPEAT 0,< ;BUT 2400 IS END OF DAY, NOT START
CAIL C,^D<24*3600>
SUBI C,^D<24*3600>
>
HRR CC,C ;RETURN LOCAL TIME IN RH D.
SETZ C, ;IF NO TIME ZONE, RETURN LH D ZERO
;EXCEPT FOR LOCAL TIME ZONE (BELOW).
TLNE F,B16 ;TIME ZONE ALLOWED IN INPUT?
JRST ITN10
CAIE G,"-" ;"-" PRECEDES TIME ZONE
JRST ITN10 ;NO TIME ZONE
CALL IDCHAR ;NEXT CHARACTER
CAIG G,"Z" ;LETTER NEXT?
CAIGE G,"A" ;..
JRST ITN10 ;NO, NO TIME ZONE (EXTRA CHAR READ)
CALL ZONE ;INPUT STRING, SEARCH TIME ZONES TABLE,
;RETURN THE RIGHT THING IN C (INCL B2 ON).
;(NOTE THAT "DAYL" OR "STD" CAN BE INPUT,
;WHICH LEAVES B2 OFF.)
ITN10: MOVE B,TIMZON ;LOCAL TIME ZONE
TRNN C,B2 ;UNLESS A TIME ZONE WAS INPUT,
DPB B,[POINT 6,C,35] ;RETURN LOCAL TIME ZONE IN C B12-17
HRL CC,C ;RETURN THIS STUFF IN LH D.
;IDTNCS...
;NOW DONE DECODING DATE AND TIME.
;CHECK TERMINATOR: IT SHOULD BE NON-ALPHANUMERIC
IDTNC8: CAIG G,"Z"
CAIGE G,"A"
JRST [ CAIG G,"9"
CAIGE G,"0"
JRST .+2
JRST .+1]
JRST [ TLNN F,B6
JRST ITILF
JRST IDILF]
;GIVE GOOD RETURN
MOVE B,AA ;PUT RESULTS IN PROPER AC'S
MOVE C,BB
MOVE D,CC
AOS (P) ;SKIP
RET ;RETURN
;ERROR RETURN STUFF
IDILF: SKIPA B,[DILFX1] ;"ILLEGAL FORMAT FOR DATE"
ITILF: MOVEI B,TILFX1 ;"ILLEGAL FORMAT FOR TIME"
;COME HERE WITH ERROR CODE IN B
MOVE P,DD ;RESTORE P (CAN GET HERE FROM SUBRS WITH AN
;INDEFINITE NUMBER OF EXTRANEOUS WORDS IN PD).
MOVEM B,LSTERR ;SAVE ERR CODE IN PSB FOR "GETER", ETC
RET ;RETURN +1 WITH ERROR CODE IN ACTUAL B
;SUBROUTINES FOR IDTNCS
;INPUT ALPHANUMERIC MONTH
;ACCEPTS ANY "UNIQUE SUBSTRING" OF A MONTH NAME.
;IGNORES PRECEDING SPACES AND (ON R2) PASSES FOLLOWING SEPERATING CHARS.
;R1: NEXT NON-SPACE CHAR NOT A LETTER.
;R2: SUCCESS, MONTH # IN RH AA.
;CLOBBERSS B,C,D,E.
MONTH: CALL GNSC ;GET NON-SPACE CHARACTER
CAIG G,"Z"
CAIGE G,"A"
RET ;NO LETTER: R1
CALL IDSTR ;READ STRING. BUFFERS IT IN PD. PUTS OLD
;P VALUE IN E.
MOVEI C,MONTHS ;TABLE ADDRESS
CALL FSYM ;SEARCH TABLE
JRST IDILF ;NOT FOUND, ILLEGAL DATE FORMAT
HRR AA,C ;RETURN MONTH
MOVE P,E ;DEALLOCATE STRING SPACE IN PD
AOS (P) ;SKIP
JRST IDSEP ;RETURN VIA SUBR TO PASS SEPERATING CHARS
;MACRO FOR TABLES OF MONTHS, AM-PM'S, TIME ZONES
DEFINE TM (TEXT,VALUE)
<XWD VALUE,[ASCIZ /TEXT/]>
;MONTH TEXTS TABLE, IN FSYSM FORMAT
MONTHS: ^D12 ;WORD 0 OF TABLES IS NUMBER OF ENTRIES
TM APRIL,3
TM AUGUST,7
TM DECEMBER,^D11
TM FEBRUARY,1
TM JANUARY,0
TM JULY,6
TM JUNE,5
TM MARCH,2
TM MAY,4
TM NOVEMBER,^D10
TM OCTOBER,^D9
TM SEPTEMBER,^D8
;IDTNCS SUBROUTINES...
;SUBROUTINE TO INPUT YEAR
;RETURNS YEAR IN LH AA
YEAR: CALL IDNIN ;INPUT NUMBER
JRST IDILF ;NONE, ILLEGAL DATE FORMAT ERROR
CAIGE B,^D100
ADDI B,^D1900
CAIL B,^D1858
CAILE B,^D2576
JRST IDILF ;OUT OF RANGE, "ILLEGAL FORMAT"
HRL AA,B
RET
;AM-PM LOOKUP ROUTINE. FIRST CHARACTER MUST BE IN G.
;ACCEPTS ONE OF MORE LETTERS OF -- AND RETURNS + --
; AM 1
; PM 2
; NOON 3