SCREEN 0: DEFDBL A-Z DO CLS : LOCATE 1, 1: COLOR 12: PRINT "Immettere una data: " LOCATE 1, 21: COLOR 10: PRINT CHR$(95); Token$ = "" 10 DO One = ASC(INPUT$(1)) LOOP UNTIL One = 48 OR One = 49 OR One = 50 OR One = 51 Token$ = CHR$(One) LOCATE 1, 21: COLOR 10: PRINT Token$ + CHR$(95); 20 IF One = 51 THEN DO Two = ASC(INPUT$(1)) LOOP UNTIL Two = 48 OR Two = 49 OR Two = 8 ELSE DO Two = ASC(INPUT$(1)) LOOP UNTIL Two >= 48 AND Two <= 57 OR Two = 8 END IF IF Two = 8 THEN LOCATE 1, 21: PRINT CHR$(95) + CHR$(32); GOTO 10 END IF Token$ = Token$ + CHR$(Two) LOCATE 1, 22: PRINT RIGHT$(Token$, 1) + CHR$(47) + CHR$(95); D = VAL(Token$) 30 DO Three = ASC(INPUT$(1)) LOOP UNTIL Three = 48 OR Three = 49 OR Three = 8 IF Three = 8 THEN LOCATE 1, 22: PRINT CHR$(95) + SPACE$(2); Token$ = LEFT$(Token$, 1) GOTO 20 END IF Token$ = Token$ + CHR$(Three) LOCATE 1, 24: PRINT RIGHT$(Token$, 1) + CHR$(95); 40 DO Flag = 0 Four = ASC(INPUT$(1)) M = VAL(RIGHT$(Token$ + CHR$(Four), 2)) IF Four < 48 OR Four > 57 THEN Flag = 1 IF Three = 49 AND Four > 50 THEN Flag = 1 IF D > 29 AND M = 2 THEN Flag = 1 IF D = 31 AND (M = 4 OR M = 6 OR M = 9 OR M = 11) THEN Flag = 1 IF Four = 8 THEN LOCATE 1, 24: PRINT CHR$(95) + CHR$(32); Token$ = LEFT$(Token$, 2) GOTO 30 END IF LOOP UNTIL Flag <> 1 Token$ = Token$ + CHR$(Four) LOCATE 1, 25: PRINT RIGHT$(Token$, 1) + CHR$(47) + CHR$(95); 50 DO Five = ASC(INPUT$(1)) LOOP UNTIL Five >= 48 AND Five <= 57 OR Five = 45 OR Five = 8 IF Five = 8 THEN LOCATE 1, 25: PRINT CHR$(95) + SPACE$(2); Token$ = LEFT$(Token$, 3) GOTO 40 END IF Token$ = Token$ + CHR$(Five) Year$ = CHR$(Five) LOCATE 1, 27: PRINT RIGHT$(Token$, 1) + CHR$(95); DO Nul = 0: Sign = 0 DO Flag = 0 Six = ASC(INPUT$(1)) Year$ = Year$ + CHR$(Six) IF Six <> 13 AND (Six < 48 OR Six > 57) THEN Year$ = LEFT$(Year$, LEN(Year$) - 1): Flag = 1 IF Year$ = CHR$(45) + CHR$(13) OR Year$ = CHR$(45) + CHR$(48) THEN Year$ = LEFT$(Year$, LEN(Year$) - 1): Flag = 1 IF ABS(VAL(Year$)) > 5000000 THEN Year$ = LEFT$(Year$, LEN(Year$) - 1): Flag = 1 IF VAL(Year$) < -46 AND D > 28 AND M = 2 THEN Year$ = LEFT$(Year$, LEN(Year$) - 1): Flag = 1 IF Flag <> 1 AND Six <> 13 THEN LOCATE 1, 26 + LEN(Year$): PRINT CHR$(Six) + CHR$(95); IF Flag <> 1 AND Six = 13 THEN LOCATE 1, 26 + LEN(Year$): PRINT CHR$(32); IF Six = 8 AND LEN(Year$) = 1 THEN LOCATE 1, 27: PRINT CHR$(95) + CHR$(32); Token$ = LEFT$(Token$, 4) GOTO 50 END IF IF Six = 8 AND LEN(Year$) > 1 THEN Year$ = LEFT$(Year$, LEN(Year$) - 1) LOCATE 1, 27 + LEN(Year$): PRINT CHR$(95) + CHR$(32); END IF LOOP UNTIL Six = 13 AND Flag <> 1 Token$ = Token$ + MID$(Year$, 2): Y = VAL(Year$) IF Y / 4 <> INT(Y / 4) AND D = 29 AND M = 2 THEN Sign = 1 IF Y > 1500 AND Y / 100 = INT(Y / 100) AND Y / 400 <> INT(Y / 400) AND D = 29 AND M = 2 THEN Sign = 1 IF Y = 1582 AND M = 10 AND (D > 4 AND D < 15) THEN Sign = 1 IF Sign = 1 THEN Nul = 1 Year$ = LEFT$(Year$, LEN(Year$) - 1) LOCATE 1, 27 + LEN(Year$): PRINT CHR$(95); END IF LOOP UNTIL Nul <> 1 IF Y >= 0 THEN SELECT CASE M CASE 1 Token = (Y - 1) * 365 + INT((Y - 1) / 4) + D CASE 2 Token = (Y - 1) * 365 + INT((Y - 1) / 4) + 31 + D CASE 3 Token = (Y - 1) * 365 + INT(Y / 4) + 59 + D CASE 4 Token = (Y - 1) * 365 + INT(Y / 4) + 90 + D CASE 5 Token = (Y - 1) * 365 + INT(Y / 4) + 120 + D CASE 6 Token = (Y - 1) * 365 + INT(Y / 4) + 151 + D CASE 7 Token = (Y - 1) * 365 + INT(Y / 4) + 181 + D CASE 8 Token = (Y - 1) * 365 + INT(Y / 4) + 212 + D CASE 9 Token = (Y - 1) * 365 + INT(Y / 4) + 243 + D CASE 10 Token = (Y - 1) * 365 + INT(Y / 4) + 273 + D CASE 11 Token = (Y - 1) * 365 + INT(Y / 4) + 304 + D CASE 12 Token = (Y - 1) * 365 + INT(Y / 4) + 334 + D END SELECT IF Y > 1582 THEN Minus = -1 FOR K = 1500 TO Y STEP 100 IF K / 400 <> INT(K / 400) THEN Minus = Minus + 1 NEXT Token = Token - Minus - 10 END IF IF Y = 1582 AND M > 10 THEN Token = Token - 10 ELSE IF Y = 1582 AND M = 10 AND D >= 15 THEN Token = Token - 10 END IF Token = Token + 366 LOCATE 1, 21: PRINT SPACE$(32); LOCATE 1, 21: SELECT CASE Token MOD 7 CASE 0 PRINT "Mercoled¨"; CASE 1 PRINT "Gioved¨"; CASE 2 PRINT "Venerd¨"; CASE 3 PRINT "Sabato"; CASE 4 PRINT "Domenica"; CASE 5 PRINT "Luned¨"; CASE 6 PRINT "Marted¨"; END SELECT ELSE SELECT CASE M CASE 1 Token = (Y + 1) * 365 - 365 + D CASE 2 Token = (Y + 1) * 365 - 334 + D CASE 3 Token = (Y + 1) * 365 - 306 + D CASE 4 Token = (Y + 1) * 365 - 275 + D CASE 5 Token = (Y + 1) * 365 - 245 + D CASE 6 Token = (Y + 1) * 365 - 214 + D CASE 7 Token = (Y + 1) * 365 - 184 + D CASE 8 Token = (Y + 1) * 365 - 153 + D CASE 9 Token = (Y + 1) * 365 - 122 + D CASE 10 Token = (Y + 1) * 365 - 92 + D CASE 11 Token = (Y + 1) * 365 - 61 + D CASE 12 Token = (Y + 1) * 365 - 31 + D END SELECT IF Y > -46 THEN IF M <= 2 THEN Token = Token + FIX(Y / 4) ELSE Token = Token + FIX((Y + 1) / 4) END IF ELSE Token = Token - 11 END IF LOCATE 1, 21: PRINT SPACE$(32); LOCATE 1, 21: SELECT CASE ABS(Token - 1) MOD 7 CASE 0 PRINT "Gioved¨"; CASE 1 PRINT "Mercoled¨"; CASE 2 PRINT "Marted¨"; CASE 3 PRINT "Luned¨"; CASE 4 PRINT "Domenica"; CASE 5 PRINT "Sabato"; CASE 6 PRINT "Venerd¨"; END SELECT END IF PRINT CHR$(44); D; RESTORE FOR I = 1 TO M READ Month$ NEXT DATA gennaio, febbraio, marzo, aprile, maggio, giugno, luglio, agosto, settembre, ottobre, novembre, dicembre PRINT Month$; ABS(Y); IF Y > 0 THEN PRINT "d.C." IF Y < 0 THEN PRINT "a.C." LOCATE 2, 1: COLOR 12: PRINT "Giorno assoluto:"; IF Token - 1 < 0 THEN PRINT CHR$(32); COLOR 10: IF Token > 0 THEN PRINT Token; ELSE PRINT Token - 1; LOCATE 3, 1: COLOR 12: PRINT "Operatore: "; DO LOCATE 3, 12: PRINT CHR$(32); LOCATE 3, 12: COLOR 10: PRINT CHR$(95); Sym$ = INPUT$(1) LOOP UNTIL Sym$ = CHR$(42) OR Sym$ = CHR$(43) OR Sym$ = CHR$(45) OR Sym$ = CHR$(27) OR Sym$ = CHR$(13) IF Sym$ <> CHR$(13) AND Sym$ <> CHR$(27) THEN LOCATE 3, 12: PRINT Sym$; LOCATE 4, 1: COLOR 12: PRINT "Variazione o fattore: "; LOCATE 4, 23: COLOR 10: PRINT CHR$(95); 60 DO One$ = INPUT$(1) LOOP WHILE (ASC(One$) < 49 OR ASC(One$) > 57) AND ASC(One$) <> 45 Incr$ = One$ LOCATE 4, 23: PRINT One$ + CHR$(95); DO Flag1 = 0 DO One$ = INPUT$(1) LOOP WHILE (ASC(One$) < 48 OR ASC(One$) > 57) AND ASC(One$) <> 8 AND ASC(One$) <> 13 IF One$ = CHR$(8) THEN LOCATE 4, 23: PRINT CHR$(95) + CHR$(32); GOTO 60 END IF IF (Incr$ = CHR$(45) AND One$ = CHR$(48)) OR (Incr$ = CHR$(45) AND One$ = CHR$(13)) THEN Flag1 = 1 ELSE Incr$ = Incr$ + One$ LOCATE 4, 24: PRINT One$ + CHR$(95); END IF LOOP UNTIL Flag1 <> 1 IF RIGHT$(Incr$, 1) <> CHR$(13) THEN DO DO Two$ = INPUT$(1) LOOP WHILE ASC(Two$) <> 13 AND (ASC(Two$) < 48 OR ASC(Two$) > 57) AND ASC(Two$) <> 8 IF Two$ <> CHR$(13) AND Two$ <> CHR$(8) THEN Incr$ = Incr$ + Two$ IF Two$ <> CHR$(8) THEN LOCATE 4, 22 + LEN(Incr$) IF Two$ <> CHR$(13) THEN PRINT Two$ + CHR$(95); END IF IF Two$ = CHR$(8) AND LEN(Incr$) = 1 THEN Incr$ = "" LOCATE 4, 23: PRINT CHR$(95) + CHR$(32); GOTO 60 END IF IF Two$ = CHR$(8) AND LEN(Incr$) > 1 THEN Incr$ = LEFT$(Incr$, LEN(Incr$) - 1) LOCATE 4, 23 + LEN(Incr$): PRINT CHR$(95) + CHR$(32); END IF LOOP WHILE ASC(Two$) <> 13 ELSE LOCATE 4, 24: PRINT CHR$(32); END IF LOCATE 4, 23 + LEN(Incr$): PRINT CHR$(32); Incr = VAL(Incr$) IF Sym$ = CHR$(42) THEN IF Token <= 0 THEN Day = (Token - 1) * Incr ELSE Day = Token * Incr END IF END IF IF Sym$ = CHR$(43) THEN Day = Token + Incr IF Day <= 0 THEN Day = Day - 1 END IF IF Sym$ = CHR$(45) THEN Day = Token - Incr IF Day <= 0 THEN Day = Day - 1 END IF LOCATE 5, 1: COLOR 12: PRINT "Data finale:"; LOCATE 5, 13: COLOR 10 IF Day > 0 THEN PRINT Day; IF Day < 0 THEN PRINT CHR$(32); Day; ELSE LOCATE 3, 1: PRINT SPACE$(12); END IF DO LOCATE 7, 1: COLOR 12: PRINT "Altra immissione [S/N]?"; LOCATE 7, 25: COLOR 10: PRINT CHR$(95); Again$ = INPUT$(1) LOOP UNTIL Again$ = CHR$(78) OR Again$ = CHR$(83) OR Again$ = CHR$(110) OR Again$ = CHR$(115) LOCATE 7, 25: PRINT Again$; LOOP UNTIL Again$ = CHR$(78) OR Again$ = CHR$(110) PRINT : END