#!/bin/bash  
echo -e "funktiot paikasta:"$kanta/OMATSKRIPTIT/FUNKTIOKIRJASTO/Skriptiajurin_funktiot liitetään koodiin # petteriIII 18.11.2016
find ~/OMATSKRIPTIT -name "*~" -exec rm -rf {} \; # koe  onko tässä parempi 25.2.2015

function ToimintaValinnanPerusteella () {
  # set -f 
  [[ $ValitunTeksti = '.edellinen_kansio.' ]] && [[ $Tapahtuma = enter ]] && KansionNimi=$(dirname "$KansionNimi") && täytä_valittavat && TalletaMistäKansiostaEnsikerrallaAloitetaan && continue
  [[ $ValitunTeksti != '.edellinen_kansio.' ]] && $Tapahtuma  
  # set +f
} 
   
function Osiojollaollaan { osiojollaollaan=$(df | grep -m 1 /dev/ | awk '{print $1}' | sed 's,/dev/,,g'); }

function Levyjollaollaan { Osiojollaollaan; levyjollaollaan=$(echo $osiojollaollaan | tr -d 0123456789 ) ; } 

function Tunnetutosiot { tunnetutosiot=$(blkid | awk '{print $1}' | tr -d : | sed 's,/dev/,,g'); }

function Osioselvitys () { lsblk -o +label,fstype,uuid; }

function lue_näppäimistöltä () { # Vastauksia voi kutsua  historiasta ja editoida.Kutsu: lue_näppäimistöltä <kysyttävän muuttujan nimi> <kysymysteksti jonka merkkivalikoimaa ei ole rajoitettu>
historiatiedosto=$kanta/"$KansionNimi"/ARKISTO/HISTORIAT/$(echo "$2" | cksum | awk '{print $1}') # tiedoston nimi on numero joka on cksum:mattu kusumys-tekstistä
[[ ! -f "$historiatiedosto" ]] && echo 'historian alku' > "$historiatiedosto"                    # kysymykselle luodaan numeron mukainen historia-tiedosto 1 kerralla 
apu=$(eval echo \$$1); apu=${2%%\\n*}; apu=${apu##*nyt: }
[[ "$apu" != $(tail -1  "$historiatiedosto") ]] &&  echo "$apu" >> "$historiatiedosto"           # kysytty arvo viedään heti historiaan josta sitä voi siis kutsua heti
echo -e "Edellisiä vastauksia voi selailla nuolinäppäimillä. Myös editointi toimii. Kirjoita vaikkei kysymysmerkkiä näykään \n"$2
HISTFILE="$historiatiedosto"
set -o history
read -e $1 # $1 on muuttujan nimi joten lause on ihan hyväksyttävä
eval echo \$$1 >>  "$historiatiedosto" # muutettu arvo menee historiatiedostoon.
HISTFILE=~/.bash_history
set -o history
}

function HaeSenRivinNumeroJollaViimeksiTyöskenneltiinTässäKansiossa () {
[[ ! -d $kanta/"$KansionNimi"/ARKISTO ]] && mkdir $kanta/"$KansionNimi"/ARKISTO # koelisäys
[[ ! -f $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa ]] && echo 1 > $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa  
ValitunNumero=$(cat $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa) 
}

# function LueParametrit () { lue_näppäimistöltä Parametrit "$ValitunTeksti"" saattaa vaatia parametreja. Annapa niitä jos asiallisena pidät:"; }

function varmista_että_kovalevyn_OMATSKRIPTIT_on_uudempi_kuin_muistitikulla_oleva () {
kovalevynaika=$(stat /home/$USER/OMATSKRIPTIT --printf="%Y\n")      # aika sekunneissa Linuxin luomisesta 1.1.1970
muistitikunaika=$(stat /media/$USER/*/OMATSKRIPTIT --printf="%Y\n") #touch /home/$USER/OMATSKRIPTIT tai: touch /media/$USER/*/OMATSKRIPTIT 
(( $kovalevynaika < $muistitikunaika )) && echo -e "kovalevyn OMATSKRIPTIT on vanhempi kuin muistitikulla oleva, kovalevyllä se on:\n"$(date -d@$kovalevynaika)"   ja muistitikulla:\n"$( date -d@$muistitikunaika)"  kopioi tikku kovalevylle tai jotakin." && read ;}

function orpojen_poisto () {
echo 'orpo-tiedostojen poisto'
eval apu=("$(ls $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT -Q --hide=ARKISTO)");
for (( n=0; n<${#apu[*]}; n++ ));do 
[[ ! -f $kanta/"${KansionNimi}"/"${apu[$n]}" ]] &&  echo 'poistan:'$kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"${apu[$n]}" && rm -fr  $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"${apu[$n]}"; done
eval apu=("$(ls $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT -Q --hide=ARKISTO)");
for (( n=0; n<${#apu[*]}; n++ ));do 
[[ ! -f $kanta/"${KansionNimi}"/"${apu[$n]}" ]] &&  echo 'poistan:'$kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"${apu[$n]}" && rm -fr  $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"${apu[$n]}"; done
for n in $(ls /media/$USER); do [[ -d /media/$USER/$n/OMATSKRIPTIT ]] && rsync -au ~/OMATSKRIPTIT /media/$USER/$n; done & # tämä suorittaa sen backupin.
touch ~/OMATSKRIPTIT 
}

function VarmistaEttäArkistotOnTehty () { 
[[ $(echo "$KansionNimi" | grep ARKISTO) ]] && return # ARKISTOssa ei arkistoida koelisäys 2.4.2005
ValitunTeksti=${ValitunTeksti:-ARKISTO}
[[ "$ValitunTeksti" = ARKISTO ]] && mkdir -p $kanta/"$KansionNimi"/"$ValitunTeksti"/ARKISTO/POISTETUT && echo 1 > $kanta/"$KansionNimi"/"$ValitunTeksti"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa && arkistoonpoikettu=$kanta/"${KansionNimi%ARKISTO*}" # && orpojen_poisto
[[ ! $( echo $kanta/"$KansionNimi"/"$ValitunTeksti" | grep ARKISTO) ]] && {
  arkistoonpoikettu='' # ARKISTOn ARKISTOa ei täytetä. koe 26.4
  mkdir -p $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti" 
  mkdir -p $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" 
  mkdir -p $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti" 
  mkdir -p $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA   
  SuurinSkriptino=0
}
orpojen_poisto 
}

function TalletaSenRivinNumeroJollaNytTyöskennelläänTässäKansiossa () { 
  [[ -f $kanta/"$KansionNimi"/"$ValitunTeksti" ]] && echo $ValitunNumero > $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa && VarmistaEttäArkistotOnTehty
  echo -n ''
}

function LueMissäOnPoikettuArkistoon () {
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/arkistoonpoikettu ]] && arkistoonpoikettu="$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/arkistoonpoikettu)" || arkistoonpoikettu=''
echo -n ''
} 

function LueMistäKansiostaAloitetaan {
[[ ! -d $kanta/OMATSKRIPTIT/ARKISTO ]] && mkdir -p $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT && KansionNimi=OMATSKRIPTIT && ValitunNumero=1  # koe 28.5.2016
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa ]] && KansionNimi="$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa)" || ( KansionNimi='OMATSKRIPTIT'; mkdir $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET; echo $KansionNimi > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa)
[[ $(echo $KansionNimi grep "OMATSKRIPTIT\/") ]] || KansionNimi='OMATSKRIPTIT' # Jotta vieraita kansioita voitaisiin tutkia muttei aloittaa niistä
}

function TalletaMistäKansiostaEnsikerrallaAloitetaan_uusi { echo OMATSKRIPTIT"${KansionNimi#*OMATSKRIPTIT}" > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa ;} # poistetaan edestä /- ja .-merkit

function TalletaMistäKansiostaEnsikerrallaAloitetaan {
apu=${KansionNimi%%[[:alnum:]]*}; KansionNimi=${KansionNimi:${#apu}} # siistitään kansionnimi alkamaan aakkosnumerolla
apu=${KansionNimi%[[:alnum:]]*}; KansionNimi=${KansionNimi:0:$((${#apu}+1))} # siistitään kansionnimi päättymään aakkosnumeroon
echo "$KansionNimi">$kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/KansionNimiAloituksessa
} # tämä korjattu versio oli jostainsyystä jäänyt pois, lisätty 26.8.2015. Muuttui taas turhaksi ?

function muuta_uusi_nimi_valituksi {
täytä_valittavat 
for (( n=1; n<=${#Valittavat[@]}; n++ )); do [[ $SkriptinNimi = "${Valittavat[n-1]}" ]] && break; done # jättääkö viimeisen matkasta ?
echo $n > $kanta/"$KansionNimi"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa 
} 

function muuttaa_osoitetun_kohdan_nimeä () { # haettu OMATSKRIPTIT2:sta
lue_näppäimistöltä  SkriptinNimi 'Nimeämisen voi tehdä ainoastaan samaan kansioon. Nimi on nyt: '"$ValitunTeksti""\nmiksi haluat muuttaa sen: "
mv $kanta/"$KansionNimi"/"$ValitunTeksti" $kanta/"$KansionNimi"/"$SkriptinNimi"
for n in DOKUMENTIT SKRIPTIT HISTORIAT; do
  mv $kanta/"$KansionNimi"/ARKISTO/"$n"/"$ValitunTeksti" $kanta/"$KansionNimi"/ARKISTO/"$n"/"$SkriptinNimi"
  [[ $n = DOKUMENTIT ]] && cat $kanta/"$KansionNimi"/ARKISTO/"$n"/"$SkriptinNimi"/"$ValitunTeksti"_dokumentti > $kanta/"$KansionNimi"/ARKISTO/"$n"/"$SkriptinNimi"/"$SkriptinNimi"_dokumentti # lisäys
done
muuta_uusi_nimi_valituksi
}

function end { # erikoistoimet 
VarmistaEttäArkistotOnTehty 
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku1 ]] && ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku1) 
avaimet="end=palaa Skriptiajuriin" # aikaisemmin oli lisäksi: delete=siirrä merkittyyn   insert=merkitse kansio"
Valittavat=( 'tehdä uutta tähän valittuun kansioon' 'poistaa valitun kohdan' 'siirtää osoitettavaan kansioon osoitettavat kansiot tai skriptit' 'muuttaa osoitetun kohdan nimeä' ' ' 'etsiä esimerkkirivejä kuinka jotakin käskyä käytetään' 'etsiä kysyttävää ilmaisua OMISTASKRIPTEISTÄ' 'etsiä missä skripti on kun muistaa sen nimestä jotakin' 'etsiä kysyttävää ilmaisua tämän skriptin arkistosta' 'etsiä kysyttävää ilmaisua kotikansiosta' 'etsiä duplikaatit' ' ' 'rajoittaa tämän skriptin arkistossa koodien lukua' 'hexeditoida osoitettua skriptiä' 'hakea man sivun ss64 comista' 'etsiä millä man_sivuilla puhutaan siitä toiminnosta jota pitäisi käyttää' 'etsiä skriptistä kontrollimerkit')
ValitunTekstiTalteen=$ValitunTeksti
ValitseValittavistaYksi "Minkä toiminnon haluat suorittaa tälle: ""$KansionNimi"/"$ValitunTeksti" "$avaimet" 
[[ $Tapahtuma = end ]] && LopetaSkriptiJaPalaaSkriptiajuriin # muistutuksena että näin on määrätty jo funktiokutsussa
Toimi="$ValitunTeksti"
ValitunTeksti=$ValitunTekstiTalteen
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku1
$(echo $Toimi  | tr ' ' _ ) # välilyönnit muutetaan alleviivauksiksi.  huomioi että tämä on funktiokutsu
LopetaSkriptiJaPalaaSkriptiajuriin # erikoistoimista palataan aina skriptiajuriin
} 

function etsiä_duplikaatit () { find ~/OMATSKRIPTIT -not -path '*/\.*' -type f 2>/dev/null  -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 66 | cut -c 35- 
   read -p 'Voit selata tekstiä hiirellä. Jatkaakseesi paina enter' ;}

function insert () { # tarkastele tuloksia
Skripti=$kanta/"$KansionNimi"/"$ValitunTeksti"
SkriptiVersiot=$kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"
SkriptinTulosteet=$kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA 
avaimet='delete=kopioi osoitetun datan muodostanut skriptiversio arkistosta käyttöön   insert=palaa skriptiajuriin   f2=poista viimeinen'
ValitunNumero=1 #${#Valittavat[@]}
while true; do  
unset Valittavat 
  apu=$ValitunTeksti
  Valittavat=($(ls -1 "$SkriptinTulosteet" | sort -V))   
  ValitseValittavistaYksi "Mitä tiedonkeräys-kerran dataa haluat tarkastella(data0 on tuorein):" "$avaimet"
  [[ $Tapahtuma = insert ]] &&  LopetaSkriptiJaPalaaSkriptiajuriin
  [[ $Tapahtuma = delete ]] && versio=$(cat $SkriptinTulosteet/"$ValitunTeksti" | head -1 | awk '{print $2}') && echo palautetaan skriptiversio:$versio && cp -vf "$SkriptiVersiot"/$versio  "$Skripti" && ValitunTeksti=$apu && LopetaSkriptiJaPalaaSkriptiajuriin
  [[ $Tapahtuma = f2 ]] && rm $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$lll"/DATA/$(ls $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$lll"/DATA | sort -V | tail -n 1) && ValitunTeksti=$lll && continue
  cat $SkriptinTulosteet/$ValitunTeksti
  echo ;read -p 'paina return jatkaakseesi'
done
}

function etsiä_millä_man_sivuilla_puhutaan_siitä_toiminnosta_jota_pitäisi_käyttää () {
lue_näppäimistöltä kiinnostuksen_aihe "mistä man-sivuilla pitäisi puhua: " 
apropos $kiinnostuksen_aihe
read -p 'paina return jatkaakseesi'
}

function home () { 
unset Valittavat 
i=0; while IFS=$'\n' read -r rivi; do Valittavat[i]="${rivi}" && ((++i)) ; done < $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/Viimeksikoodatut
ValitunNumero=1
avaimet="home=palaa Skriptiajuriin"
ValitseValittavistaYksi "mihin tiedostoon haluat siirtyä näistä aikaisemmin koodatuista:" "$avaimet"
[[ $Tapahtuma = home ]] && LopetaSkriptiJaPalaaSkriptiajuriin # muistutuksena että näin on määrätty jo funktiokutsussa
KansionNimi=${ValitunTeksti%/*}
ValitunTeksti=${ValitunTeksti##*/}
SkriptinNimi=$ValitunTeksti; muuta_uusi_nimi_valituksi 
koodaa 
}

function hakea_man_sivun_ss64_comista () {
Valittavat=($(cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/käskyluettelo))
ValitseValittavistaYksi "valitse mistä käskystä haluat man-sivun"
firefox  http://ss64.com/bash/$ValitunTeksti.html 
}

function täytä_valittavat () { #find ~/OMATSKRIPTIT -name "*~" -exec rm {} \; # hidastaa tässä 
unset Valittavat; IFS=$'\n'; [[ $(echo "$KansionNimi" | grep \/ARKISTO\/) ]] && Valittavat=(.edellinen_kansio. $(ls -t $kanta/"$KansionNimi" --hide ARKISTO)) || Valittavat=(.edellinen_kansio. $(ls $kanta/"$KansionNimi" --group-directories-first --hide=*~ )); unset IFS
}

function tehdä_uutta_tähän_valittuun_kansioon () {
while true; do
  lue_näppäimistöltä UusiNimi "Uuden luomista. Pelkillä suurilla kirjaimilla kirjoitetusta nimestä tulee kansio ja yksikin pieni kirjain tekee siitä skriptin.\n- nimissä saa olla välilyöntejä ja melkein kaikkia muitakin merkkejä paitsi kauttaviiva.\n\nMikä tulee uuden kohdan nimeksi: "
  [[ ! $UusiNimi ]] && return
  [[ -f $kanta/"$KansionNimi"/"$UusiNimi" ]] && echo 'sen niminen skripti on jo, annapa uusi nimi' && sleep 2 
  [[ -d $kanta/"$KansionNimi"/"$UusiNimi" ]] && echo 'sen niminen kansio on jo, annapa uusi nimi' && sleep 2 
  [[ ! -f $kanta/"$KansionNimi"/"$UusiNimi" ]] && [[ ! -d $kanta/"$KansionNimi"/"$UusiNimi" ]] && break 
done
[[ $( echo "$UusiNimi"  | grep [[:lower:]] ) ]] && tehdä_uuden_skriptin_tähän_kansioon || tehdä_uuden_kansion_tähän_kansioon 
}

function tehdä_uuden_skriptin_tähän_kansioon () {
SkriptinNimi=$UusiNimi
mkdir -p $kanta/"$KansionNimi"/ARKISTO/{SKRIPTIT,DOKUMENTIT,HISTORIAT}/"$SkriptinNimi"
mkdir -p $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$SkriptinNimi"/DATA
ValitunTeksti="$SkriptinNimi"
[[ ! -d $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$UusiNimi" ]] && mkdir -p $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$UusiNimi"
echo -e '#!/bin/bash' > $kanta/"$KansionNimi"/"$SkriptinNimi"
f2 #gedit $kanta/"$KansionNimi"/"$SkriptinNimi"
muuta_uusi_nimi_valituksi

}

function tehdä_uuden_kansion_tähän_kansioon () { 
# merkitse_kansio # pitää lisätä koodia
UusiKansio="$UusiNimi" 
KansionNimi=$KansionNimi/$UusiKansio #; merkitsekansio
echo 'Luon kansion nimeltä: '$kanta/"$KansionNimi"' ja sille arkistot' 
mkdir -p $kanta/"$KansionNimi"/"$UusiKansio"/ARKISTO/{SKRIPTIT,DOKUMENTIT,HISTORIAT,POISTETUT}
echo 1 > $kanta/"$KansionNimi"/"$UusiKansio"/ARKISTO/ViimeksiValittuSkriptiTässäKansiossa 
UusiKansio=$kanta/"$KansionNimi"/"$UusiKansio"
}

function rajoittaa_tämän_skriptin_arkistossa_koodien_lukua {
for apu in SKRIPTIT # dokumentteja tuskin kertyy rajoitettavaksi
do
  echo -n 'ARKISTO/'$apu/"$ValitunTeksti"' tilatarve sanoja: '; (echo 0; find $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti" -printf '%s +\n'; echo p) | dc
  SuurinDatano=$(($(ls --ignore=*'_dokumentti' $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti" | sort -n | tail -n 1)-10))
  Pienin_numero=$(ls --ignore=*'_dokumentti' --ignore=ARKISTO $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti" | sort -g | head -n 1)
  [[ SuurinDatano-Pienin_numero -gt 99 ]] && echo $apu'  ARKISTO-kopioiden lukumäärä: '$((SuurinDatano-Pienin_numero))'  vähennetään 99:ään' || echo 'ei vähennettävää'
  for (( n=Pienin_numero; n<=SuurinDatano-99; n++ ));do 
    [[ -f $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti"/$n ]] && rm -f $kanta/"$KansionNimi"/ARKISTO/$apu/"$ValitunTeksti"/$n
  done
done
read -p 'paina enter jatkaakseesi'
}

function poistaa_valitun_kohdan () {
echo "poistettava:$kanta/"$KansionNimi"/"$ValitunTekstiTalteen" löytyy linuxin roskakorista. Paina enter jatkaakseesi"; read
mv $kanta/"$KansionNimi"/"$ValitunTekstiTalteen" ~/.local/share/Trash/files # siirretään skripti elikä kansio roskikseen ja ARKISTOt jätetään
echo '[Trash Info]' > ~/.local/share/Trash/info/"$ValitunTekstiTalteen.trashinfo"                # info echo:t ovat palautusta varten
echo 'Path='$kanta/"$KansionNimi"/"$ValitunTekstiTalteen" >> ~/.local/share/Trash/info/"$ValitunTekstiTalteen.trashinfo" 
echo 'DeletionDate='$(date) >> ~/.local/share/Trash/info/"$ValitunTekstiTalteen.trashinfo" 
rm -R $kanta/"$KansionNimi"/ARKISTO/{SKRIPTIT,DOKUMENTIT,HISTORIAT}/"$ValitunTekstiTalteen"
}

function siirtää_osoitettavaan_kansioon_osoitettavat_kansiot_tai_skriptit () { # siirtää_osoitettavaan_kansioon_osoitettavat_kansiot_tai_skriptit 
KansioJohonSiirretaan="$KansionNimi" 
avaimet="valitse kansio johon siirretään ja paina f3 kun olet siinä kansiossa     f2=palaa Skriptiajuriin"
while true
do 
  täytä_valittavat
  ValitseValittavistaYksi "Nyt ollaan kansiossa: ""$KansionNimi" "$avaimet"  # 1 valinta
  [[ $Tapahtuma = f3 ]] && break
  [[ $Tapahtuma = f2 ]] && return
  [[ $ValitunTeksti = ".edellinen_kansio." ]] && KansioJohonSiirretaan=$(dirname "$KansioJohonSiirretaan") && KansionNimi="$KansioJohonSiirretaan"
  [[ -d "$KansionNimi"/"$ValitunTeksti" ]] && KansioJohonSiirretaan="$KansioJohonSiirretaan"/"$ValitunTeksti" && KansionNimi="$KansioJohonSiirretaan" 
done
KansionNimi='OMATSKRIPTIT'
avaimet="f3=takaisin skriptiajuriin   f4=siirrä tämä"
while true
do 
  täytä_valittavat 
  ValitseValittavistaYksi "Valittu siirretään painettaessa f4 kansioon:""$KansioJohonSiirretaan" "$avaimet"
  [[ $ValitunTeksti = '.edellinen kansio.' ]] && KansionNimi=$(dirname "$KansionNimi") && continue 
  [[ $Tapahtuma = f3 ]] && return
  [[ $Tapahtuma = 'enter' ]] && [[ -d $kanta/"$KansionNimi"/"$ValitunTeksti" ]] && KansionNimi=/"$KansionNimi"/"$ValitunTeksti" 
  [[ $Tapahtuma = f4 ]] && {
  [[ -d $kanta/"$KansionNimi"/"$ValitunTeksti" ]] &&  mv -u $kanta/"$KansionNimi"/"$ValitunTeksti"  "$KansioJohonSiirretaan"/"$ValitunTeksti" && continue
    mv -u $kanta/"$KansionNimi"/"$ValitunTeksti"  "$KansioJohonSiirretaan"/"$ValitunTeksti"
    mv -u $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"  "$KansioJohonSiirretaan"/ARKISTO/SKRIPTIT/"$ValitunTeksti" # arkistot siirretään myös
    mv -u $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"  "$KansioJohonSiirretaan"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" 
    mv -u $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"  "$KansioJohonSiirretaan"/ARKISTO/HISTORIAT/"$ValitunTeksti"    
                           }
done
}

function MikäliLöytyiFunktioNiinLisääSeSkriptiin () { # tämä funktio lisää ajettavaan skriptiin sen tarvitsemia funktioita.
[[ ! -f delme ]] && return
cat $kanta/"$KansionNimi"/"$ValitunTeksti" | sed '1!d' > ~/delme1
cat ~/delme >> ~/delme1
cat $kanta/"$KansionNimi"/"$ValitunTeksti" | sed '1d' >> ~/delme1
cat delme1 > $kanta/"$KansionNimi"/"$ValitunTeksti"
echo "funktio on lisätty skriptiisi. Saattaa viedä monta kierrosta ennenkuin kaikki funktiot on ladattu."
rm -f delme delme1
}

function LisääkoodattavaViimeksiKoodatuihinJaPoistaToisinnot () { # kirjoitetaan tiedoston ensimmäiseksi riviksi, rajoitetaan kokoa ja poistetaan duplikaatit
echo "$KansionNimi"/"$ValitunTeksti" > /tmp/delme; 
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/Viimeksikoodatut ]] && cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/Viimeksikoodatut | head -n 40 | awk '!x[$0]++' >> /tmp/delme
cp /tmp/delme $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/Viimeksikoodatut
}

function f2 { # koodaa 197
[[ -d $kanta/"$KansionNimi"/"$ValitunTeksti" ]] && echo kansiota ei voi koodata. Valinta siirtyy takaisin tiedoston kohdalle && read -p 'paina enter' && continue
LisääkoodattavaViimeksiKoodatuihinJaPoistaToisinnot
[[ $(echo "$KansionNimi" | grep ARKISTO) ]] && apu="${KansionNimi%ARKISTO*}""${KansionNimi##*\/}" && gedit $kanta/"$KansionNimi"'/'"$ValitunTeksti" "$apu" && continue # toimia ARKISTOssa ei arkistoida 
[[ ! -f $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"$ValitunTeksti"/1 ]] && cp $kanta/"$KansionNimi"/"$ValitunTeksti"  $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT'/"$ValitunTeksti"'/'1

SuurinDatano=$(ls $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"$ValitunTeksti" | sort -g | tr -d [[:alpha:]] | tail -n 1) #; echo $SuurinDatano; read 
koodattavat=$kanta/\'"$KansionNimi"\'/\'"$ValitunTeksti"\' 
for n in $(ls --hide=ARKISTO --hide=0 --hide=^[[:alpha:]] $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"$ValitunTeksti" | sort -g | tail -n 6); do koodattavat="$koodattavat"' '$kanta/\'"$KansionNimi"\'/'ARKISTO/SKRIPTIT/'\'"$ValitunTeksti"\'/$n; done 
## laheta kirjasto-funktion kopio arkistoon mikäli kirjastoa kutsutaan 
[[ ! -f $kanta/"$KansionNimi"/Skriptiajurin_funktiot ]] && funktiokirjasto=$(grep  FUNKTIOKIRJASTO $kanta/"$KansionNimi"'/'"$ValitunTeksti" | grep -v ARKISTO | awk {'print $2'}  | tr "\n" "  " ) || funktiokirjasto='' 
[[ "$KansionNimi" = OMATSKRIPTIT/FUNKTIOKIRJASTO ]] && funktiokirjasto='' # funktiokirjastossa ei liitetä toisia kirjastoja
[[ $funktiokirjasto ]] && koodattavat="$koodattavat"' '"$funktiokirjasto"; echo # lisää kirjastot editoitaviin

apuu=$(cat $kanta/"$KansionNimi"/"$ValitunTeksti" | awk '{print $1}'); [[ $(echo ${apuu:2:5}) = "/bin/" ]] && bash -n $kanta/"$KansionNimi"/"$ValitunTeksti" &>$kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe
[[ -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe ]] && [[ $(cat -b $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe) < 1 ]] && rm -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe 
[[ -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe ]] && koodattavat="$koodattavat"" "$kanta/\'"$KansionNimi"\'/ARKISTO/SKRIPTIT/\'"$ValitunTeksti"\'/virhe
eval gedit $koodattavat $(find ~/OMATSKRIPTIT/OHJEITA/PIKAVALITTAVAT -maxdepth 1 -type f -readable | sed 's/^ */"/g;s/ *$/"/g')
wait $! # $!=edellisen prosessin PID. Wait odottaa prosessin PID loppumista. 
[[ -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe ]] && rm -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe 
MikäliMikäänOnMuuttunutNiinTalletaVanhaVersio
}

function MikäliMikäänOnMuuttunutNiinTalletaVanhaVersio () {
DIFF=$(diff $kanta/"$KansionNimi"/"$ValitunTeksti"  $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"'/'$SuurinDatano* )
[[ ! -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"'/'$SuurinDatano* ]] && cp $kanta/"$KansionNimi"/"$ValitunTeksti"  $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"'/'1 #$((${SuurinDatano:-1}+1)) 
# [[ "$DIFF" != "" ]] && 
echo kopioin: $kanta/"$KansionNimi"/"$ValitunTeksti"" -> " $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"'/'1
cp $kanta/"$KansionNimi"/"$ValitunTeksti" $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"'/'$(($SuurinDatano+1)) 
} 

function f4 { # dokumentoi  
rm -f $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"_dokumentti~
[[ $(echo "$KansionNimi"/"$ValitunTeksti" | grep ARKISTO) ]] && gedit $kanta/OMATSKRIPTIT/ARKISTO/DOKUMENTIT/ARKISTO/ARKISTO_dokumentti && continue # ARKISTOssa ei arkistoida
[[ ! -f $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"'_dokumentti' ]] && touch $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"'_dokumentti' # koe
[[ -d "$KansionNimi"/"$ValitunTeksti" ]] && echo 'kansion dokumentti' && sleep .1
[[ ! -d $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" ]] && mkdir -p $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" 
[[ ! -f $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/0 ]] && touch $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/0
SuurinDokuno=$(ls --hide="$ValitunTeksti"'_dokumentti' $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" | sort -g | tail -n 1)
apu=''
for n in $(ls --hide=*_dokumentti --hide=0 $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti" | sort -g | tail -n 6); do  apu="$apu"$kanta"/"\'"$KansionNimi"\'/ARKISTO/DOKUMENTIT/\'"$ValitunTeksti"\'/$n' '; done 
eval gedit -- $kanta/\'"$KansionNimi"\'/ARKISTO/DOKUMENTIT/\'"$ValitunTeksti"\'/\'"$ValitunTeksti"\'_dokumentti\  "$apu" $kanta/\'"$KansionNimi"\'/\'"$ValitunTeksti"\'
wait $! # $!=edellisen prosessin PID. Wait odottaa prosessin PID loppumista. 
DIFF=$(diff $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"_dokumentti  $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/$SuurinDokuno ) 
[[ "$DIFF" != "" ]] && cp $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/"$ValitunTeksti"'_dokumentti'  $kanta/"$KansionNimi"/ARKISTO/DOKUMENTIT/"$ValitunTeksti"/$(($SuurinDokuno+1))
#reset;  
}

function hexeditoida_osoitettua_skriptiä { bless $kanta/"$KansionNimi"/"$ValitunTekstiTalteen"; }  

function etsiä_missä_skripti_on_kun_muistaa_sen_nimestä_jotakin () { 
avaimet='end=palaa Skriptiajuriin' 
while true 
do
  clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo; echo 
  lue_näppäimistöltä hakusana "mitä ilmausta etsit kansioiden tai skriptien nimistä (teksti voi olla keskelläkin sanaa)?"
  eval Valittavat=(" "$(find $kanta/OMATSKRIPTIT |  grep -i "$hakusana" | grep -v /ARKISTO/ | grep -v .*~ | sed 's/^ */"/g;s/ *$/"/g')) 
  ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2) 
  ValitseValittavistaYksi "ilmaus löytyi näiden skriptien nimistä: valitse editoitava näpäyttämällä sitä enter sen kohdalla." "$avaimet" 
  [[ $Tapahtuma = "end" ]] && break 
  [[ $Tapahtuma = "enter" ]] && {
KansionNimi=${ValitunTeksti##*$USER\/}; KansionNimi=${KansionNimi%/*}; ValitunTeksti="${ValitunTeksti##*/}"       
koodaa
TalletaMistäKansiostaEnsikerrallaAloitetaan
break                       ;}
done 
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2  
} 

function etsiä_kysyttävää_ilmaisua_kotikansiosta () { 
clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo 
lue_näppäimistöltä hakusana "mitä ilmausta kotikansiosta ?"
optiot="-lr"; [[ ${hakusana:0:3} = '-i ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* } 
[[ ${hakusana:0:3} = '-E ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* }  
IFS=$'\n' Valittavat=($(grep $optiot "$hakusana" $kanta | grep -v ARKISTO | grep -v local | grep -v cache)); unset IFS
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 ]] && ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2) 
while true
do 
  avaimet='end=palaa Skriptiajuriin'
  ValitseValittavistaYksi "ilmaus löytyi näistä skripteistä: valitse editoitava nuolinäppäimillä ja paina enter" "$avaimet"  
  [[ $Tapahtuma = "end" ]] && break  
  gedit  $kanta/OMATSKRIPTIT/"$ValitunTeksti" 
done 
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 
}

function etsiä_kysyttävää_ilmaisua_tämän_skriptin_arkistosta { # etsiä_näistä, -v ?
clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo 
lue_näppäimistöltä hakusana "mitä ilmausta etsit tämän skriptin arkistosta ?"
optiot="-lr"; [[ ${hakusana:0:3} = '-i ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* } 
[[ ${hakusana:0:3} = '-E ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* } 
Valittavat=($(grep $optiot "$hakusana" $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$VanhaValitunTeksti" | sort -V )) #| sed 's/^ */"/g;s/ *$/"/g'  )) onko oikein
for (( n=0; n<=${#Valittavat[@]}-1 ; n++ )); do Valittavat[$n]=${Valittavat[$n]##*"$KansionNimi"/ARKISTO/SKRIPTIT/"$VanhaValitunTeksti"\/}; done
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 ]] && ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2) 
while true
do 
  avaimet='end=palaa Skriptiajuriin'
  ValitseValittavistaYksi "ilmaus löytyi näistä skripteistä: valitse editoitava nuolinäppäimillä ja paina enter" "$avaimet"  
  [[ $Tapahtuma = "end" ]] && break  
  gedit  $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$VanhaValitunTeksti"/"$ValitunTeksti" 
done 
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 
}

function etsiä_kysyttävää_ilmaisua_OMISTASKRIPTEISTÄ { # etsiä_näistä, -v ?
clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo 
lue_näppäimistöltä hakusana "mitä ilmausta etsit kaikista omista skripteistä ?"
optiot="-lr"; [[ ${hakusana:0:3} = '-i ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* } 
[[ ${hakusana:0:3} = '-E ' ]]  && optiot=${hakusana%% *}lr && hakusana=${hakusana#* }  
IFS=$'\n' Valittavat=($(grep $optiot "$hakusana" $kanta/OMATSKRIPTIT | grep -v /ARKISTO/ )); unset IFS #| sed 's/ *$/\n/g' )); unset IFS #| grep -v kopio | sed 's/^ */"/g;s/ *$/"/g'  ))
for (( n=0; n<=${#Valittavat[@]}-1 ; n++ )); do Valittavat[$n]=${Valittavat[$n]##*OMATSKRIPTIT\/}; done
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 ]] && ValitunNumero=$(cat $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2) 
while true
do 
  avaimet='end=palaa Skriptiajuriin  home=palaa Skriptiajuriin valittu valittuna'
  ValitseValittavistaYksi "ilmaus löytyi näistä skripteistä: valitse editoitava tiedosto nuolinäppäimillä ja paina enter" "$avaimet"  
  [[ $Tapahtuma = "end" ]] && break  
  [[ $Tapahtuma = "home" ]] && KansionNimi=OMATSKRIPTIT/${ValitunTeksti%/*} && ValitunTeksti=${ValitunTeksti##*/} && TalletaMistäKansiostaEnsikerrallaAloitetaan && break # koe2  
  # siis on painettu enter. #gedit  $kanta/OMATSKRIPTIT/"$ValitunTeksti" 
  grep --color -E "$hakusana|$"  $kanta/OMATSKRIPTIT/"$ValitunTeksti"
  read
done 
echo $ValitunNumero > $kanta/OMATSKRIPTIT/ARKISTO/ASETUKSET/haku2 
}

function etsiä_esimerkkirivejä_kuinka_jotakin_käskyä_käytetään {
clear; cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/grepin_määreet; echo; echo 
lue_näppäimistöltä hakusana "millaisia esimerkkirivejä etsit kaikista omista skripteistä ?"
find ~/OMATSKRIPTIT ! -path '*ARKISTO*' ! -path *sgml -type f  -exec grep "$hakusana" {} \; > /tmp/delmee; awk '{$1=$1} !x[$0]++' /tmp/delmee;
read -p 'hiirellä voi vieritää näyttöä. paina enter jatkaakseesi'
}

function f3 { # lukea_ohjeita. kaikki ohjekansion tiedostot luetaan. Tiedostoja voi lisätä tai poistaa ja Skriptiajuri ottaa muutoksen automaattisesti huomioon.
apu="$(find $kanta/OMATSKRIPTIT/OHJEITA/Skriptiajuri -maxdepth 1 -type f -regextype posix-extended -regex "[^0-9]*")" 
gedit $apu 
} 
 
function enter { # ajaa_valitun_skriptin 
[[ -d $kanta/"$KansionNimi"/"$ValitunTeksti" ]] && KansionNimi="$KansionNimi"/"$ValitunTeksti" && täytä_valittavat && return # kansion muutos
bash -n $kanta/"$KansionNimi"/"$ValitunTeksti" &>/tmp/virhe; [[ $( cat /tmp/virhe) ]] && echo 'tulkkauskelvoton, mennään koodaamaan' && sleep 1 && f2 # mene editoriin jos koodissa on virhe uusikoe
[[ $( cat /tmp/virhe) ]] && return
[[ $(echo "$ValitunTeksti" | grep -e '.PDF' -e '.pdf') ]] && evince $kanta/"$KansionNimi"/"$ValitunTeksti" && return 
[[ $(echo "$ValitunTeksti" | grep -e '\.doc' -e .html -e .odt -e .sgml -e .xml) ]] && /usr/bin/libreoffice $kanta/"$KansionNimi"/"$ValitunTeksti" && return # poistot löytyy 39:stä  
clear && echo -e 'suoritan skriptin: '$kanta/"$KansionNimi"/$ValitunTeksti'\n' &&  time . $kanta/"$KansionNimi"/"$ValitunTeksti" > >(tee /tmp/tuloste) && read -p 'jatkaakseesi paina enter' || ( echo "skriptisi päätyi virheeseen virhe-statuksella: "$? ; read -p "jatkaakseesi paina enter"; $kanta/OMATSKRIPTIT/"Skriptiajuri" )          
Siirrä_datatiedostot_pois_alta_ja_talleta_data0
[[ -f $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe ]] && rm $kanta/"$KansionNimi"/ARKISTO/SKRIPTIT/"$ValitunTeksti"/virhe 
MikäliLöytyiFunktioNiinLisääSeSkriptiin ;}

function Siirrä_datatiedostot_pois_alta_ja_talleta_data0 {
SuurinSkriptino=$(ls $kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"$ValitunTeksti" | sort -g | tr -d [[:alpha:]] | tail -n 1)
SuurinDatano=$(($(ls -1 $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA | grep data.*[0-9]* | grep -o [0-9].* | sort -g | tail -n 1))); for (( n=SuurinDatano; n>-1; n-- )) do mv  $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA/data$n  $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA/data$((n+1));done
echo $SuurinSkriptino" "$SuurinDatano #koe
cat <(echo tulos_saatu_skriptiversiolla:" "$SuurinSkriptino"  hetki jolloin se on tulostettu: "$(date)) /tmp/tuloste > $kanta/"$KansionNimi"/ARKISTO/HISTORIAT/"$ValitunTeksti"/DATA/data0
echo ajokerta:" "$SuurinDatano"  hetki jolloin se on tulostettu: "$(date) ;}

# function virhe () { echo -n 'virherivi: '; caller; read ;}

function command_not_found_handle () { # tätä funktiota kutsutaan kun käyttöjärjestelmästä puuttuu paketti tai funktio johon viitataan.
clear;echo -n 'virherivi: '; caller 
komennon_nimi="$1" 
[[ $( apt-cache show "$komennon_nimi" | grep "Package:" ) ]] && { echo 'Koneessasi ei ole toimintoon tarvittavaa pakettia nimeltään:'$komennon_nimi'. Sen hakemiseksi tarvitsen salasanasi. Toiminnon jälkeen aja käsky uudelleen'; sudo apt-get install "$komennon_nimi"; exit; } 
rm -f delme
for n in "$(ls --hide=ARKISTO ~/OMATSKRIPTIT/FUNKTIOKIRJASTO)"; do
apu="$(grep -n "function $komennon_nimi" ~/OMATSKRIPTIT/FUNKTIOKIRJASTO/"$n")"; alku="${apu%%:*}"
apu="$(grep -n "function" ~/OMATSKRIPTIT/FUNKTIOKIRJASTO/"$n" | grep -A 1 $alku: | sed 2q | grep -v $alku:)"; loppu="${apu%%:*}"
[[ "$apu" ]] && eval cat ~/OMATSKRIPTIT/FUNKTIOKIRJASTO/"$n" | sed $alku','$((loppu-1))'!d' > delme
done
[[ -f delme ]] && echo 'funktio '$komennon_nimi' löytyi ja se on nyt tiedostossa: delme' 
exit # pitäisikö olla return tai poistaa kokonaan
}


 

