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