REM *******************************************************************
REM *** BioR 
REM *** BioRhythmusKurve + diverse Datumsberechnungen
REM *** (c) MausBaer & Amadeus 09/88 
REM *******************************************************************

   CLEAR

   GOSUB Definitionen
   
   SCREEN 2,641,256,4,2
   WINDOW 2,"BioR 0.95: BioRhythmus & diverse Datums-Berechnungen",,0,2
   GOSUB FarbTafel
   
   MENU 5,0,1,"Info"
   MENU 5,1,1,"Info"
   MENU 5,2,1,"About"
   
   MENU 6,0,1,"BioRhythmus"
   MENU 6,1,1,"ab TagesDatum"
   MENU 6,2,1,"ab EingabeDatum"
   
   MENU 7,0,1,"Datum"
   MENU 7,1,1,"Datum +(-) Tage"
   MENU 7,2,1,"Tage bis Datum"
   MENU 7,3,1,"Heute bis Datum"
   MENU 7,4,1,"Datum1 - Datum2"
   MENU 7,5,1,"Wochentag"
   
   ON MENU  GOSUB Steuerung     : MENU  ON
   ON BREAK GOSUB S.99          : BREAK ON

   ende=-1 : WHILE ende : SLEEP : WEND
   
Steuerung:
   menutitel=MENU(0) : menupunkt=MENU(1)
   ON menutitel GOTO S.99,S.99,S.99,S.99,S.05,S.06,S.07
S.05:
   ON menupunkt GOSUB S05.Info,S05.About
   RETURN
S.06:
   ON menupunkt GOSUB S06.BioTag,S06.BioDat 
   RETURN
S.07:
   ON menupunkt GOSUB S07.TagAdd,S07.AnzTag1,S07.AnzTag2,S07.Diff,S07.WochTag 
   RETURN
S.99:
   MENU 5,0,0 : MENU 6,0,0 :MENU 7,0,0 : MENU RESET : END                                               
      
Definitionen: 
   anzahl=0:ende=0:anz1=0:anz23=0:anz28=0:anz33=0
   i=0:j=0:k=0:l=0:i0=0:j0=0:k0=0:l0=0:i1=0:j1=0:k1=0:l1=0:x=0:x1=0
   tt=0:mm=0:jj=0
   datum$=" ":dat1$=" ":dat2$=" "
   zweipi=6.283185
   DIM monat(12)
   monat(1)=31:monat(2)=28:monat(3)=31:monat(4)=30:monat(5)=31
   monat(6)=30:monat(7)=31:monat(8)=31:monat(9)=30:monat(10)=31
   monat(11)=30:monat(12)=31:monat(0)=0
   DIM tag$(6)
   tag$(0)="Sonntag":tag$(1)="Montag":tag$(2)="Dienstag":tag$(3)="Mittwoch"
   tag$(4)="Donnerstag":tag$(5)="Freitag":tag$(6)="Samstag"
   RETURN

REM ***  Beschreibung der Funktionen   
S05.Info:

   CLS:COLOR 5,0:PRINT"(Info)"
   PRINT" "
   PRINT"  Was BioRhythmus  eigentlich  ist, müßt Ihr  schon  selber  wissen."
   PRINT" "
   PRINT"  Die Farben kriegt Ihr aber erklärt :"
   PRINT" "
   COLOR 3,0
   PRINT"  rot  = seelisch   (Periode = 23 Tage)" 
   COLOR 7,0
   PRINT"  blau = körperlich (Periode = 28 Tage)"    
   COLOR 9,0
   PRINT"  grün = geistig    (Periode = 33 Tage)" 
   PRINT" "
   PRINT" " 
   COLOR 5,0
   PRINT"  Den DatumsBerechnungen liegt der gregorianische Kalender zugrunde."
   PRINT"  Als (theoretischer) Basistag gilt der 1. Januar  des  Jahres 0001." 
   PRINT"  Theoretisch dshalb, weil die  DatumsKorrektur  des Papstes Gregor "
   PRINT"  des XIII (Ausfall der Tage zwischen dem 4. und dem 15.Oktober 1582"
   PRINT"  nicht berücksichtigt wird. Für  die  BioRhythmusKurve und  Datums-"
   PRINT"  Berechnungen NACH dem 15. Oktober 1582  ist  dies unerheblich  und"
   PRINT"  TagesDaten  davor  entbehren  sowieso  einer tagesgenauen, wissen-"
   PRINT"  schaftlichen Grundlage."
   PRINT" "
   PRINT" "
   PRINT"                    IN DIESEM SINNE :    DON`T WORRY, BE HAPPY !!!"  
   RETURN 
   
REM ***  Herkunft des Programmes   
S05.About:
   CLS:COLOR 5,0:PRINT"(About)"
   PRINT" "
   PRINT"  Das Programm enstand aus dem legendären INSTITUT FÜR BIORHYTHMIK"
   PRINT"  (IFB). Geschrieben hat es originaer ´MausBaer´ Reinhard Huppert."
   PRINT"  Irgendwann stiess dann Ralf ´Amadeus´ von der Heiden hinzu,     "
   PRINT"  meinte, seinen Senf hinzugeben zu müssen (was er auch prompt    "
   PRINT"  tat) und herausgekommen ist das hier......"
   PRINT" "
   PRINT"  Die Versionsnummer 0.95 bedeutet im uebrigen nicht, dass wir    "
   PRINT"  daran jemals weiterarbeiten werden und falls doch, dann garan-  "
   PRINT"  tiert nicht mehr in Amiga-Basic, sondern einfach nur, dass dies "
   PRINT"  eines der vielen Programme ist, die nie fertig werden....       "
   PRINT" "
   PRINT"  Das Programm ist geschrieben fuer die gepatchte PAL-Version von"
   PRINT"  Amiga-Basic..... falls es bei irgendwem Murks auf dem Schirm geben"
   PRINT"  geben sollte, dann koennte (quatsch: MUSS !!) es daran liegen."
   PRINT" "
   PRINT"  Ohne Enzio wäre es nie entstanden."
   RETURN 
   
REM ***  BioRhythmusKurve ab Monat des Tagesdatums zeichnen   
S06.BioTag:
   CLS:COLOR 5,0:PRINT"(BioRythmusKurve ab TagesDatum)"
   INPUT"Geburtsdatum in der Form 11.10.1952:";dat1$
   dat2$="01."+LEFT$(DATE$,2)+"."+RIGHT$(DATE$,4) 
   PRINT"Startdatum                         :"+dat2$
   GOSUB U03.Bio
   RETURN

REM ***  BioRhythmusKurve ab EingabeDatum zeichnen   
S06.BioDat:
   CLS:COLOR 5,0:PRINT"(BioRythmusKurve ab EingabeDatum)" 
   INPUT"Geburtsdatum in der Form 11.10.1952:";dat1$
   INPUT"Startdatum   in der Form 30.03.1957:";dat2$
   GOSUB U03.Bio
   RETURN

REM *** Anzahl Tage zum Datum addieren (+ und -)  
S07.TagAdd:
   CLS:COLOR 5,0:PRINT"(Anzahl Tage zum Datum addieren (+ und -))" 
   INPUT"Datum1 in der Form 11.10.1952:";datum$
   INPUT"Anzahl Tage:";anz1
   GOSUB U01.DatAnz
   anzahl=anzahl+anz1
   GOSUB U02.AnzDat
   PRINT" ":PRINT"Neues Datum: "+datum$
   RETURN
 
REM *** Anzahl Tage bis zum EingabeDatum 
S07.AnzTag1:
   CLS:COLOR 5,0:PRINT"(Anzahl Tage bis zum EingabeDatum)" 
   INPUT"Datum in der Form 30.03.1957:";datum$
   GOSUB U01.DatAnz
   PRINT" ":PRINT"Anzahl Tage:",anzahl 
   RETURN
  
REM *** Anzahl Tage von Heute bis zum EingabeDatum 
S07.AnzTag2:
   CLS:COLOR 5,0:PRINT"(Anzahl Tage von Heute bis zum EingabeDatum)" 
   INPUT"Datum in der Form 11.10.1952:";datum$
   GOSUB U01.DatAnz:anz1=anzahl
   datum$=MID$(DATE$,4,2)+"."+LEFT$(DATE$,2)+"."+RIGHT$(DATE$,4) 
   GOSUB U01.DatAnz:anzahl=anzahl-anz1 
   PRINT" ":PRINT"Anzahl Tage:",anzahl 
   RETURN
   
REM *** Anzahl Tage von Datum1 bis Datum2 
S07.Diff:
   CLS:COLOR 5,0:PRINT"(Anzahl Tage von Datum1 bis Datum2)" 
   INPUT"Datum1 in der Form 11.10.1952:";dat1$
   INPUT"Datum2 in der Form 30.03.1957:";dat2$
   datum$=dat1$:GOSUB U01.DatAnz:anz1=anzahl
   datum$=dat2$:GOSUB U01.DatAnz:anzahl=anzahl-anz1
   PRINT" ":PRINT"Anzahl Tage:",anzahl 
   RETURN
   
REM *** Wochentag bestimmen  
S07.WochTag: 
   CLS:COLOR 5,0:PRINT"(Wochentag bestimmen)"
   INPUT"Datum in der Form 30.03.1957)";datum$
   GOSUB U01.DatAnz
   i=anzahl - INT(anzahl/7)*7
   PRINT tag$(i)
   RETURN
   
REM *** Datum in Anzahl Tage umrechnen  
U01.DatAnz:
   tt=VAL(LEFT$(datum$,2))
   mm=VAL(MID$(datum$,4,2))
   jj=VAL(RIGHT$(datum$,4))
   anzahl=(jj-1)*365 + INT((jj-1)/4) - INT((jj-1)/100) + INT((jj-1)/400) 
   IF jj MOD 4 = 0 THEN monat(2)=29
   IF jj MOD 4 > 0 THEN monat(2)=28
   i=0 : x1=0
   WHILE (i <= mm-1) : x1=x1+monat(i) : i=i+1 : WEND
   anzahl=anzahl + x1 + tt  
   monat(2)=28    
   RETURN 

REM *** Anzahl Tage in Datum umrechnen *******************************
U02.AnzDat:
   jj=INT(anzahl/365)
U02.A:   
   tt=jj*365 + INT(jj/4) - INT(jj/100) + INT(jj/400)
   IF tt => anzahl THEN jj=jj-1 : GOTO U02.A
   jj=jj+1 : tt=anzahl-tt : i=0
   IF jj MOD 4 = 0 THEN monat(2)=29
   IF jj MOD 4 > 0 THEN monat(2)=28
U02.B:
   i=i+1 : tt=tt - monat(i)
   IF tt > 0 THEN GOTO U02.B
   tt=tt + monat(i)
   IF i => 10 THEN
      datum$=STR$(tt) + "."  + RIGHT$(STR$(i),2) + "." + STR$(jj)
   ELSE
      datum$=STR$(tt) + ".0" + RIGHT$(STR$(i),1) + "." + STR$(jj)
   END IF
   monat(2)=28
   RETURN   
  
REM *** BioRhythmusKurve zeichnen 
U03.Bio:
   datum$=dat1$ : GOSUB U01.DatAnz : anz1=anzahl
   datum$=dat2$ : GOSUB U01.DatAnz : anz2=anzahl     
   anz1=anz2-anz1   
   anz23=anz1 - INT(anz1/23)*23 
   anz28=anz1 - INT(anz1/28)*28
   anz33=anz1 - INT(anz1/33)*33           
   LINE(0,124)-(640,124),5
   FOR i=0 TO 640 STEP 10 : LINE(i,122)-(i,126),5 : NEXT i
   FOR i=0 TO 640 STEP 100: LINE(i,120)-(i,130),5 : NEXT i
   COLOR 5,0   
   LOCATE 17,1:PRINT LEFT$(dat2$,6)
   GOSUB U01.DatAnz
   FOR rr=1 TO 6   
       anzahl=anzahl+10
       GOSUB U02.AnzDat
       LOCATE 17,2+rr*12-(FIX(6/3/rr+.5)):PRINT MID$(datum$,2,6)
   NEXT rr
   COLOR 5,0
   LOCATE 29,1 :PRINT "Intellektuell": LINE(110,228)-(190,228),9
   LOCATE 29,30:PRINT "Körperlich"   : LINE(320,228)-(400,228),7 
   LOCATE 29,55:PRINT "Seelisch"     : LINE(510,228)-(590,228),3 
   i0=0
   j0=90 * SIN((10*anz33) / 330 * zweipi)  
   k0=80 * SIN((10*anz28) / 280 * zweipi)  
   l0=70 * SIN((10*anz23) / 230 * zweipi)  
   FOR i1=1 TO 640
       j1=90*SIN((i1+10*anz33)/330*zweipi):LINE(i0,124-j0)-(i1,124-j1),9
       k1=80*SIN((i1+10*anz28)/280*zweipi):LINE(i0,124-k0)-(i1,124-k1),7
       l1=70*SIN((i1+10*anz23)/230*zweipi):LINE(i0,124-l0)-(i1,124-l1),3
       i0=i1:j0=j1:k0=k1:l0=l1
   NEXT i1
   anzahl=anzahl-60
   COLOR 5,0
   FOR rr=1 TO 6   
       anzahl=anzahl+10
       GOSUB U02.AnzDat
       LOCATE 17,2+rr*12-(FIX(6/3/rr+.5)):PRINT MID$(datum$,2,6)
   NEXT rr
   COLOR 3,0
   RETURN

REM *** Farbtafel ****************************************************   
FarbTafel:
   PALETTE 0,0,0,0     
   PALETTE 1,.8,0,0    
   PALETTE 2,1,0,0     
   PALETTE 3,.93,.2,0  
   PALETTE 4,1,.4,0    
   PALETTE 5,1,.6,0    
   PALETTE 6,1,.8,0    
   PALETTE 17,1,1,0    
   PALETTE 8,.6,1,.13  
   PALETTE 9,.53,.8,.13
   PALETTE 10,.4,.6,0  
   PALETTE 11,.2,.4,0  
   PALETTE 12,0,.4,0   
   PALETTE 13,0,.6,.67 
   PALETTE 14,0,.8,.6  
   PALETTE 15,0,1,.6   
   PALETTE 16,.2,1,.93 
   PALETTE 7,.2,.73,1  
   PALETTE 18,.13,.4,1 
   PALETTE 19,.4,0,1   
   PALETTE 20,0,0,.6   
   PALETTE 21,.33,.13,.87
   PALETTE 22,.6,.2,1    
   PALETTE 23,1,0,1      
   PALETTE 24,.93,.53,.73 
   PALETTE 25,1,.73,.73   
   PALETTE 26,.8,.53,.47  
   PALETTE 27,.6,.4,.33   
   PALETTE 28,.4,.2,0     
   PALETTE 29,.4,.4,.4    
   PALETTE 30,.6,.6,.6    
   PALETTE 31,1,1,1       
RETURN




                
