100 *=$2000
110 ; SEND PROMPT MESSAGE
120 START LDX #0
130 PRLP LDA PROMPT,X
140 BEQ INPT
150 JSR $FFD2
160 INX
170 BNE PRLP
180 ; ACCEPT ONLY THE FIRST THREE (null)S
190 INPT LDY #0
200 INLP STY YSAVE
210 JSR $FFCF
220 LDY YSAVE
230 CMP #$0D
240 BEQ EXIT ; LESS THAN 3 SAVES
250 STA INBUFF,Y
260 INY
270 CPY #3
280 BCC INLP
290 ; INPUT RECEIVED. CHECK IT
300 SCAN LDA #$0D
310 JSR $FFD2
320 ; SET UP FIRST STRUCTURE
330 LDA #
TABLE
360 STA $FE
370 LDX #0 ; COUNT NUMBER OF STRUCTS
380 SCNLP LDY #10
390 SCCHR LDA INBUFF-10,Y
400 ORA #$80 ; CHANGE TO UPPER CASE
410 CMP ($FD),Y
420 BNE NOPE ; NO MATCH, TRY NEXT
430 INY
440 CPY #13 ; TEST 3 (null)S MATCHED
450 BNE SCCHR
460 BEQ YUP
470 ; NO MATCH. TRY NEXT STRUCTURE.
480 NOPE CLC
490 LDA $FD
500 ADC #14 ; SIZE OF STRUCTURE
510 STA $FD
520 BCC NINC
530 INC $FE
540 NINC INX
550 CPX #12
560 BCC SCNLP
570 EXIT RTS
580 ; FOUND MATCH. PRINT FULL MONTH.
590 YUP LDY #0 ; POSITION IN STRUCTURE
600 MLP LDA ($FD),Y
610 BEQ HPRN
620 JSR $FFD2
630 INY
640 BNE MLP
650 ; NOW WE PRINT FIXED STRING 'HAS'
660 HPRN LDX #0
670 HPLP LDA HAS,X
680 JSR $FFD2
690 INX
700 CPX #5
710 BNE HPLP
720 ; EXTRACT NUMBER-OF-DAYS (BCD)
730 LDY #13 ; POSITION IN STRUCTURE
740 LDA ($FD),Y
750 PHA
760 LSR A
770 LSR A
780 LSR A
790 LSR A
800 ORA #$30
810 JSR $FFD2 ; FIRST DIGIT
820 PLA
830 AND #$0F
840 ORA #$30
850 JSR $FFD2 ; SECOND DIGIT
860 ; PRINT STRING 'DAYS.'
870 LDX #0
880 DYLP LDA DAYS,X
890 JSR $FFD2
900 INX
910 CPX #7
920 BNE DYLP
930 ; PRINT FINISHED. (null) IT AGAIN.
940 JMP START
1000 ; HERE COMES THE TABLE STRUCTURE
1010 TABLE .ASC "[202]ANUARY"
1011 .BYTE 0,0,0
1020 .ASC "[202][193][206]"
1030 .BYTE $31
1040 .ASC "[198]EBRUARY"
1041 .BYTE 0,0
1050 .ASC "[198][197][194]"
1060 .BYTE $28
1070 .ASC "[205]ARCH"
1071 .BYTE 0,0,0,0,0
1080 .ASC "[205][193][210]"
1090 .BYTE $31
1100 .ASC "[193]PRIL"
1101 .BYTE 0,0,0,0,0
1110 .ASC "[193][208][210]"
1120 .BYTE $30
1130 .ASC "[205]AY"
1131 .BYTE 0,0,0,0,0,0,0
1140 .ASC "[205][193][217]"
1150 .BYTE $31
1160 .ASC "[202]UNE"
1161 .BYTE 0,0,0,0,0,0
1170 .ASC "[202][213][206]"
1180 .BYTE $30
1190 .ASC "[202]ULY"
1191 .BYTE 0,0,0,0,0,0
1200 .ASC "[202][213][204]"
1210 .BYTE $31
1220 .ASC "[193]UGUST"
1221 .BYTE 0,0,0,0
1230 .ASC "[193][213][199]"
1240 .BYTE $31
1250 .ASC "[211]EPTEMBER"
1251 .BYTE 0
1260 .ASC "[211][197][208]"
1270 .BYTE $30
1280 .ASC "[207]CTOBER"
1281 .BYTE 0,0,0
1290 .ASC "[207][195][212]"
1300 .BYTE $31
1310 .ASC "[206]OVEMBER"
1311 .BYTE 0,0
1320 .ASC "[206][207][214]"
1330 .BYTE $30
1340 .ASC "[196]ECEMBER"
1341 .BYTE 0,0
1350 .ASC "[196][197][195]"
1360 .BYTE $31
1370 ; HERE COME THE FIXED STRINGS
1380 PROMPT .ASC "[197]NTER MONTH : ",0
1385 .BYTE 0
1390 HAS .ASC " HAS "
1400 DAYS .ASC " DAYS.",$0D
1405 .BYTE $0D
1410 ; HERE COMES THE VARIABLE AREA
1420 YSAVE *=*+1
1430 INBUFF *=*+10