Programma per il Commodore Vic 20


CALENDARIO PERPETUO


Articolo pubblicato sulla rivista mensile
Commodore «COMPUTER CLUB» del marzo 1983

di Domenico & Marzio CARRO

Il programma "calendario perpetuo" è stato preparato sul Vic 20 inespanso. Poichè nelle istruzioni non compaiono POKE, esso gira anche sul Vic 20 con espansione di memoria; per essere usato sul Commodore 64 è necessario apportare piccole modifiche.
Il programma consente di visualizzare sul monitor TV qualunque mese di qualunque anno compreso fra l'anno zero dell'era volgare e l'anno 3000 d.C.
E' richiesta l'indicazione del mese (in cifre da 1 a 12) e l'anno (dopo Cristo); ottenuti tali dati, viene visualizzato il mese richiesto, e si richiede contemporaneamente l'input di un altro mese: ciò consente di "sfogliare" il calendario senza dover ridare il "RUN" ogni volta.
Il listato si basa sul "Calendario Perpetuo" [astrale] preparato e disegnato nel 1978 come rielaborazione originale di vari calendari perpetui esistenti. Per redigere il programma in Basic, sono stati aggiunti a quel calendario, alcuni secoli in modo di arrivare al 3000 (tanto per non dare la sensazione di avere un programma troppo miope).

Illustrazione del programma

a) Da 100 a 170 il programma richiede gli input M (mese) ed A (anno), e controlla ch'essi siano corretti, altrimenti segnala l'errore e ripone la richiesta di input.

b) Da 180 a 240 si esamina il caso particolare dell'Anno 1582, anno in cui, nel mese di ottobre, si è attuata la riforma del calendario passando dal Calendario Giuliano (che considerava bisestili tutti gli anni secolari) al Calendario Gregoriano (che considera bisestili gli anni secolari di 4 in 4: 1600, 2000, ecc.). Poichè, per eliminare l'errore accumulatosi dall'epoca di Giulio Cesare al 1582 era necessario eliminare 10 giorni, fu stabilito che il giorno successivo al 4 ottobre fosse denominato 15 ottobre (cioè: i giorni dal 5 al 14 ottobre 1582 non sono in realtà mai esistiti). La subroutine 250 260 realizza questo salto in fase di stampa dei giorni del mese (istruzioni 560-670).

c) Per tutti gli altri anni (diversi da 1582) il programma riprende da 330 ove l'input A viene diviso in due (S= cifre dei secoli; D = cifre delle decadi e degli anni).

d) Da 340 a 350 si confronta S con le ordinate della tabella 1. I relativi dati sono riportati in 680-690, riga per riga a partire dalla 5^ (in cui si ottiene nella 1^ colonna il numero romano I: questo valore si incrementa di 1 ad ogni cambio di riga). In realtà si inizia ponendo Y=8 (anzichè 8) nell'istruzìone 330: ciò equivale ad Y=1 poiché l'istruzione 510 provvederà ad effettuare Y-7 fino ad avere Y<7.

e) Da 360 a 380 si confronta S con le ascisse della tabella 1. I relativi dati sono riportati in 700-760, colonna per colonna a partire dalla prima. Y=Y+1 ad ogni cambio di colonna.

f) Da 390 a 400 si stabilisce la durata del mese (F).

g) Da 410 a 430 si confronta M con la seconda tabella. I relativi dati sono riportati in 770, raggruppando i mesi in modo da iniziare con quelli che hanno un 1 (Luna) sulla 1^ riga, continuando con quelli che hanno 2 (Marte), e così via, in modo da incrementare ancora Y di uno ad ogni cambio di gruppo.

h) Da 440 a 500 si individuano gli anni bisestili, per i quali si rinvia alla subroutine 270-290 (che riduce Y di uno per GEN e FEB e che pone F=29 per Febbraio).

i) Da 520 a 540 si traduce M in MS (dizione del mese in tutte lettere prelevata dai dati 780-790) per la successiva stampa.

l) Da 550 a 670 si provvede alla stampa del mese usando anche la subroutine 300-320 per le linee rosse. Il valore Y stabilisce il giorno della settimana (da LU a DO) in cui inizia il primo giorno del mese; l'istruzione 560 calcola conseguentemente la colonna (X) in cui si andrà a stampare (istruzione 580) il giorno 1 del mese. Gli altri giorni del mese (fino ad F) vengono stampati di seguito, opportunamente incolonnati. I giorni che capitano di Domenica vengono stampati in rosso (istruzioni 620 e 650).

Listato del programma

Schermate del programma

    


Privacy Policy
ritorno a Calendario Perpetuo