This is a really, really awful old program of mine. Basically, when I was a kid, I read about these Big Computer Operating Systems and wanted to have one of my own… on my Commodore 64.

I’m publishing this code because it’s kind of embarrassing; yet, full disclosure is nice and it at least tells people how not to program. It also tells people how painful programming on Commodore BASIC was. Line numbers! Two-letter variable names! Weird control codes!

So what is it? This is a complete operating system! Complete with password checking, computer usage logging, email and bulletin board/news system. My friend Mikko wrote some code for this; I think the “diary” (usage log) idea, if not the implementation, was his (the messages shown here are a bit inconsistent), and I think he wrote some other parts. He even thought of writing some games for this, but I didn’t really have the time and energy to integrate them here, it seems. I even had crazy delusions of grandeur of expanding this into a full-fledged dial-in BBS system. In BASIC! Oh how amusing it all seems in retrospect…

I wrote this program mostly in early 1990s, circa 1991-1994; some random tweaks were added later. I really loved my C64, as that was the only computer I had for my personal use at that time. In 1996, I got a PC of my own, so the interest kind of waned. Also another reason for the waning was that I had been programming stuff on my father’s PC; PC had this “Pascal” thing that allowed you to do structured programming and I didn’t have to torture my eyes with two-letter variable names and, good heavens, the code merging from floppy, the endless RENUMBER commands, and so on. However, I have to say the programming on Commodore 64 with The Final Cartridge III was surprisingly painless. It’s just pretty painful to read this stuff. I guess I have a list of variables and what they mean somewhere; if I find that, I’m sure to include it here somewhere.

It’s a strange thing to note, however, that I did maintain this program way after I was using PC - I was using PC for ordinary things since early-mid 1990s. Also fascinating to note that I started using Linux in summer 1996. I had finally gotten the Big Computer Operating System I had been looking for. =)

You may note the curious mix of Finnish and English; hey, everyone does that, it’s because English is a foreign language and thus it’s automatically cool. Also it apparently tells I used the name “WwW-Wolf” back then; I’ve since completely, utterly rescinded all that sort of l33t stuff. (Ugh.) It’s “WWWWolf” now, and I don’t claim it has anything to do with WWW anymore. Much better, see? =) Also, the code was written by “Mallorcasoft”; I don’t know why I credited the code this way, it was just that every kid was supposed to have a “software house”. I have never been in that place, I just found the name cool.

Yet, it’s a fascinating bit of computing history in the scale of our little microcosm. We have evolved; we have better tools now and forever.

—Urpo Lankinen, 2008-03-29

And now, without further ado…

  100 rem
  110 rem *****************************
  120 rem  saapasboot - the ultimate
  130 rem  booter for commodore 64
  140 rem
  150 rem  copyright(c) rlcrallorcasoft
  160 rem  coded by: urpo 'www-wolf'
  170 rem  lankinen 1991-1996
  180 rem
  190 rem *****************************
  200 rem
  210 rem
  220 rem logon engine for commodore 64
  230 rem created by ul using tfc 3
  240 rem
  250 poke 774,0:poke 808,225:t%=0:dim w$(16)
  260 poke 53280,0:poke 53281,0:print"{gry3}{clr}"
  270 print"{swlc}"
  280 rem
  290 rem ******** ver number ********
  300 ve$="v8.2 BETA":ed$="06041996"
  310 rem ****************************
  320 rem
  330 rem previous lines contain the
  340 rem current version number and
  350 rem last edited information
  360 rem date in format ddmmyyyy
  370 rem 'beta' means, not yet 100%
  380 rem working, perharps.
  390 rem
  400 rem -----------------------------
  410 rem the new logon engine created
  420 rem 06 april 1996 ---------------
  430 rem
  440 rem
  450 rem
  460 rem following loads userlist
  470 rem
  480 open 2,8,2,"userlist.lst,seq,read"
  490 input#2,ma$:input#2,p:dim b$(p+1,2)
  500 for r=1 to p
  510 input#2,b$(r,1):input#2,b$(r,2)
  520 next:close 2
  530 b$(p+1,1)="*":b$(p+1,2)="*"
  540 print"{clr}{down}";ma$:nt%=3
  550 open2,0:print"{down}{down}Logon:";:input#2,a$:aa$=a$+"*":close 2
  560 pg$="":print:print"Pass:";:ct%=0
  570 get pp$:if pp$="" goto 570
  580 if pp$=chr$(13) and ct%>0 then goto 600
  590 ct%=ct%+1:pg$=pg$+pp$:print".";:goto 570
  600 for zu=1 to p
  610 if b$(zu,1)=pg$ then s$=pg$
  620 if b$(zu,2)=a$ or b$(zu,2)=aa$ then n$=a$:px=zu
  630 next:pr$=""
  640 if s$<>"" and n$<>"" then 680
  650 print:print"login incorrect"
  660 nt%=nt%-1: if nt%>=1 then 550
  670 print"{down}{down}connection closed":new
  680 ifright$(b$(px,2),1)="*"then pr$="*"
  690 print"{clr}{yel}{rvon}Welcome!{rvof}{gry3} user ";n$
  700 if pr$="*" then print"System Administrator"
  710 if pr$="*" then print"You have {rvon}FULL{$a0}ACCESS{rvof} to this system.{down}"
  720 print"{down}Terve,";n$
  730 print"tervetuloa kayttamaan"
  740 goto 830
  750 print"apua ei saatavilla!"
  760 rem paluu logoniin!
  770 rem
  780 print:goto 480
  790 print:print"{yel}*** Oi terve Herrani ***"
  800 print"    {lgrn}olen onnellinen saadessani"
  810 print"    palvella sinua.{gry3}":goto 860
  820 for i=1to2000:next
  830 print"jarjestelmaan: ";ma$
  840 gosub 3670
  850 if pr$<>"" then goto 790
  860 rem kayttopaivakirja
  870 rem programmed by urpo lankinen v0.2
  880 rem idea: mikko tormanen
  890 rem
  900 rem paivakirja tiedostossa:
  910 rem diary.dry
  920 rem
  930 rem -----------------
  940 rem dialogi
  950 rem -----------------
  960 print"{down}{rvon}{lblu}Paivakirja{rvof}{down}{gry3}"
  970 print"Ole hyva anna paivays: ";
  980 open2,0:input#2,g$:close 2
  990 print:print"{down}{down}Selvita mika on tulosi syy,"
 1000 print"kuolevainen."
 1010 dim o$(5)
 1020 input":";o$(1)
 1030 input":";o$(2)
 1040 input":";o$(3)
 1050 input":";o$(4)
 1060 input":";o$(5)
 1070 open2,8,2,"0:diary.dry,s,r":close2
 1080 open15,8,15:input#15,a,a$,t,s:close15
 1090 if a>0 then gosub 1150
 1100 open 2,8,2,"0:diary.dry,s,a"
 1110 print#2,n$;"  "g$
 1120 print#2,o$(1);" ";o$(2);" ";o$(3);" ";o$(4);" ";o$(5)
 1130 print#2
 1140 close 2:goto 1270
 1150 rem creating diary file
 1160 open 2,8,2,"0:diary.dry,s,w"
 1170 print#2,"saapasboot 64 log file"
 1180 print#2,"---------------------------------------"
 1190 print#2,"created with version ";ve$
 1200 print#2,"was last edited on   ";ed$
 1210 print#2,"log created on       ";g$
 1220 print#2,"---------------------------------------"
 1230 print#2,"System ID: ";ma$
 1240 print#2,"---------------------------------------"
 1250 close2
 1260 return
 1270 rem ja sitten boksiin...
 1280 rem
 1290 rem b o o t - e n g i n e
 1300 rem the ultimate boot engine
 1310 rem
 1320 for i=1 to 2000:next
 1330 poke 53280,0:poke53281,0:print"{clr}{grn}";
 1340 print"{down}{yel}{rvon}CBM 64 SaapasBoot{rvof}{grn} release ";ve$
 1350 print"{lred}(c) by {lgrn}Urpo Lankinen{lred} 1991-1996{grn}"
 1360 print"{lred}All rights reserved{grn} last edited:";ed$
 1370 k=fre(0):ifk<0thenk=k+65536
 1380 print k"{lgrn}BASIC bytes free{lblu}"
 1390 print n$;"{grn}";
 1400 if pr$="*" then print " {lgrn}System Administrator{grn}"
 1410 if pr$<>"*" then print
 1420 print"{down}{yel}{rvon}Present devices{rvof}:{grn}"
 1430 print"disk drive A:";:r=8:gosub 1490
 1440 print"printer     :";:r=4:gosub 1490
 1450 goto 1530
 1460 rem
 1470 rem check device (r=devicenr)
 1480 rem
 1490 open r,r,15:close r:tu=st
 1500 if tu=0 then print"{SHIFT-@}"
 1510 if tu<>0 then print
 1520 return
 1530 print"{down}{wht}{rvon}valitse toiminta{rvof}{grn}"
 1540 rem mailcheck **************
 1550 r$=left$(n$,12)+".msg,s,r"
 1560 open 2,8,2,r$:close 2
 1570 open 15,8,15:input#15,z,z$,zz,zx:close 15
 1580 if z then ml%=0:goto 1660
 1590 ml%=1:goto 1660
 1600 rem mailcheck **************
 1610 rem
 1620 rem valikko
 1630 rem
 1640 rem
 1650 rem ***************************
 1660 print"  {grn}{rvon}L{rvof}{lgrn}aheta postia   Lue ";
 1670 if ml% then print"{red}{rvon}Y{rvof}{lgrn}";:goto 1690
 1680 print"{grn}{rvon}Y{rvof}{lgrn}";
 1690 print"ksityisposti"
 1700 rem ***************************
 1710 print"  {grn}{rvon}J{rvof}{lgrn}ulkinen alue   {grn}{rvon}T{rvof}{lgrn}yhjaa yks.posti"
 1720 print"  Postia{grn}{rvon}R{rvof}{lgrn}kisto    Ty{grn}{rvon}H{rvof}{lgrn}jenna arkisto"
 1730 print"  L{grn}{rvon}A{rvof}{lgrn}taa ohjelma   {grn}{rvon}S{rvof}{lgrn}ysadmin-valikko"
 1740 print"  T{grn}{rvon}I{rvof}{lgrn}etoja         Toi{grn}{rvon}N{rvof}{lgrn}en kayttaja"
 1750 print"                  P{grn}{rvon}O{rvof}{lgrn}istu Bootista{gry3}"
 1760 open2,0
 1770 print">";
 1780 input#2,p$
 1790 close2
 1800 print
 1810 if p$="a" or p$="A" then 2000
 1820 if p$="s" or p$="S" then 2210
 1830 if p$="n" or p$="N" then run
 1840 if p$="i" or p$="I" then gosub 4360:goto 1330
 1850 if p$="o" or p$="O" then 1930
 1860 if p$="l" or p$="L" then goto 2820
 1870 if p$="j" or p$="J" then goto 3540
 1880 if p$="r" or p$="R" then goto 4740
 1890 if p$="h" or p$="H" then goto 4850
 1900 if p$="y" or p$="Y" then goto 3390
 1910 if p$="t" or p$="T" then gosub 3730
 1920 goto 1760
 1930 print"{clr}eksit!":new:end
 1940 rem
 1950 rem **************************
 1960 rem alitoimintojen osuus alkaa
 1970 rem tasta!
 1980 rem **************************
 1990 rem
 2000 print"-loader-"
 2010 print"a  = Drive 8 (primary)"
 2020 print"b  = Drive 9 (scndry)"
 2030 print"{down}0  = Argh! Wrong button..."
 2040 print">";
 2050 open2,0:input#2,z$:close2
 2060 rem
 2070 rem thinking device
 2080 rem
 2090 if z$="a"  then dn=8
 2100 if z$="b"  then dn=9
 2110 if z$="0"  then goto 1330
 2120 if z$<>"a"andz$<>"b" then goto 1320
 2130 rem
 2140 rem ask program name & load
 2150 rem
 2160 print"{clr}";z$;": % ";
 2170 open2,0:input#2,oh$:close2
 2180 load oh$,dn
 2190 new
 2200 run
 2210 print:print
 2220 if pr$="*" then 2290
 2230 print" {rvon}RESTRICTED{$a0}ACCESS{rvof}: Kaytto on sallittu"
 2240 print" VAIN 'King'-postfiksin omaaville kayt-"
 2250 print" tajatunnuksille. 'Duunari'-tason kayt-"
 2260 print" tajilla ei ole asiaa tanne."
 2270 geta$:ifa$=""then2270
 2280 goto 1330
 2290 print"{down}{down}{lgrn}{rvon}SYSTEM{$a0}ADMINSTRATOR{$a0}MENU{rvof}{gry3}"
 2300 print"{gry3} S{wht}{rvon}A{rvof}{gry3}lasanat            {wht}{rvon}P{rvof}{gry3}aivakirja"
 2310 print"{gry3} Arkistoi A{wht}{rvon}L{rvof}{gry3}L-board   Poista {wht}{rvon}S{rvof}{gry3}uojaukset"
 2320 print"{gry3} Lue {wht}{rvon}Y{rvof}{gry3}ksit.postia     Tu{wht}{rvon}H{rvof}{gry3}oa ALL-arkisto"
 2330 print"{gry3} {wht}{rvon}N{rvof}{gry3}yykkaa yks.postit"
 2340 print"{gry3} P{wht}{rvon}O{rvof}{gry3}is taalta!"
 2350 open 2,0:print"{down}{lgrn}SysOp{wht}>{gry3}";:input#2,a$:close 2
 2360 if a$="a" or a$="A" then goto 2450
 2370 if a$="s" or a$="S" then goto 2540
 2380 if a$="p" or a$="P" then goto 2580
 2390 if a$="l" or a$="L" then gosub 4130
 2400 if a$="o" or a$="O" then goto 1330
 2410 if a$="y" or a$="Y" then goto 4600
 2420 if a$="h" or a$="H" then goto 4920
 2430 if a$="n" or a$="N" then gosub 4930
 2440 goto 2350
 2450 print"{clr}{rvon}salas.","omistaja{rvof}":i=1:rf=1
 2460 rem tulostuslooppi
 2470 print b$(i,1),b$(i,2)
 2480 if rf=23 thengosub 2510:rf=1
 2490 if b$(i,1)<>"*" then i=i+1:rf=rf+1:goto 2460
 2500 print:print"listattu!":goto 2290
 2510 print:print" paina nappia jatkaaksesi"
 2520 geta$:ifa$=""then2520
 2530 return
 2540 poke 808,237:poke 774,26
 2550 print" voit poistua ja listata!"
 2560 gosub 2510
 2570 goto 2290
 2580 rem
 2590 rem paivakirjan kelaaja by ul
 2600 rem 25.08.1994
 2610 rem
 2620 print"{clr}{wht}{rvon}--- Boot Diary Reader v0.0 by Urpo L ---{rvof}{yel}"
 2630 open 2,8,2,"0:diary.dry,s,r"
 2640 get#2,k$:print k$;
 2650 if st<>64 then goto 2640
 2660 close 2
 2670 print"{wht}{rvon}---            End of File           ---{rvof}{grn}"
 2680 get k$:if k$="" then 2680
 2690 goto 2290
 2700 rem
 2710 rem postikusti the new mailer
 2720 rem by urpo lankinen 1994
 2730 rem for saapasboot 8.0
 2740 rem first version 25.08.1994
 2750 rem
 2760 print"{clr}{yel}{rvon}PostiKusti v1.1 by Urpo Lankinen 310894 {rvof}{grn}";
 2770 goto 1330: rem menu on paavalikossan ettas tiedatte!
 2780 goto 2760
 2790 rem
 2800 rem *** laheta postia ***
 2810 rem
 2820 print"{lgrn}{down}Anna vastaanottajan tunnus (ALL jos"
 2830 print"viestisi on julkinen)":ju%=0
 2840 input"{lred}RECVR:{lblu}";v$
 2850 if v$="ALL" then ju%=1:goto 2930
 2860 print"{gry3}Tarkistetaan{grn}":vv$=v$+"*"
 2870 for x=1 to p+1
 2880 print".";
 2890 if b$(x,2)=v$ goto 2940
 2900 if b$(x,2)=vv$ goto 2940
 2910 next
 2920 print"{lgrn} ei loytynyt!{down}": goto 2770
 2930 if ju%=1 then print"{lgrn}Julkinen viesti.":goto 2950
 2940 print"{lgrn} OK!":goto 2950
 2950 print"{down}{gry3}Anna viestisi aihe :  ";
 2960 input c$
 2970 goto 3050
 2980 print"{clr}{lgrn}@@@@@@@@@@@@@@@ {pur}Message {lgrn}@@@@@@@@@@@@@@@@"
 2990 print"{lblu}Lahettaja   :{lred}";n$
 3000 if ju%=1 then print"{lgrn}             Julkinen viesti":goto 3020
 3010 print"{lblu}Vast.ottaja :{lred}";v$
 3020 print"{lblu}Paivays     :{lred}";g$
 3030 print"{lblu}Aihe        :{lred}";c$
 3040 print"{down}{lgrn}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@{down}{gry3}":return
 3050 for qq=1 to 16:w$(qq)="":next
 3060 gosub 2980:for i=1 to 16
 3070 print":";:input w$(i)
 3080 next
 3090 gosub 2980
 3100 for i=1 to 16
 3110 print w$(i);" ";:next
 3120 print:print"{down}{grn}Onko OK? (k/e)"
 3130 get q$:if q$="" goto 3130
 3140 if q$="k" or q$="K" goto 3160
 3150 goto 2760
 3160 f$=left$(v$,12)+".msg"
 3170 r$=f$+",s,r"
 3180 open 3,8,2,r$:get#3,u$:close 3:uu%=0
 3190 if u$="/" then r$=f$+",s,a":goto 3210
 3200 r$=f$+",s,w":uu%=1
 3210 open 3,8,2,r$
 3220 if uu%=1 then print#3,"/":uu%=0
 3230 print#3,"@@@@@@@@@@@@@@@ Message @@@@@@@@@@@@@@@@"
 3240 print#3,"Lahettaja   :";n$
 3250 if ju%=1 then print#3,"             Julkinen viesti":goto 3270
 3260 print#3,"Vast.ottaja :";v$
 3270 print#3,"Paivays     :";g$
 3280 print#3,"Aihe        :";c$
 3290 print#3,"{down}@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@{down}"
 3300 for i=1 to 16
 3310 print#3,w$(i);" ";:next
 3320 print#3
 3330 close 3
 3340 print"{clr}Viesti kirjoitettu."
 3350 goto 2770
 3360 rem
 3370 rem lue yksit.viestit
 3380 rem
 3390 print"{clr}";
 3400 r$=left$(n$,12)+".msg,s,r"
 3410 open 2,8,2,r$:close 2:open 15,8,15:input#15,z,z$,zz,zx:close 15
 3420 if z then goto 3490
 3430 open 2,8,2,r$
 3440 get#2,f$:print f$;
 3450 if st<>64 goto 3440
 3460 close 2
 3470 gosub 3730
 3480 goto 3500
 3490 print" -- Ei viesteja laatikossa."
 3500 goto 2770
 3510 rem
 3520 rem lue julk.viestit
 3530 rem
 3540 print"{clr}";
 3550 r$="ALL.msg,s,r"
 3560 open 2,8,2,r$:close 2:open 15,8,15:input#15,z,z$,zz,zx:close 15
 3570 if z then goto 3490
 3580 open 2,8,2,r$
 3590 get#2,f$:print f$;
 3600 if st<>64 goto 3590
 3610 close 2
 3620 goto 1330
 3630 rem
 3640 rem m a i l c h e c k
 3650 rem    e n g i n e
 3660 rem by urpo l. 30081994
 3670 r$=left$(n$,12)+".msg,s,r"
 3680 open 2,8,2,r$:close 2:open 15,8,15:input#15,z,z$,zz,zx:close 15
 3690 if z then goto 3710
 3700 print"postilaatikossasi on postia.":ml%=1:goto 3720
 3710 print"postilaatikkosi on tyhja.":ml%=0
 3720 return
 3730 rem
 3740 rem tyhjenna postilaatikko
 3750 rem
 3760 input"Tyhjennanko";t$:if t$<>"k" and t$<>"K" then goto 3990
 3770 r$=left$(n$,12)+".msg,s,r"
 3780 no$=left$(n$,12)
 3790 open 2,8,2,r$:close 2:open 15,8,15:input#15,z,z$,zz,zx:close 15
 3800 if z then goto 3820
 3810 goto 3830
 3820 print"laatikko on jo tyhja!":goto 3990
 3830 print"tyhjennan postilaatikon."
 3840 r$=no$+".rcd,s,r"
 3850 open 2,8,2,r$:close 2:open 15,8,15:input#15,z,z$,zz,zx:close 15
 3860 if z=0 then goto 3910
 3870 goto 3980
 3880 rem
 3890 rem swappaa vanhan peraan
 3900 rem
 3910 k$="r0:FOO.old="+no$+".rcd":gosub 4060
 3920 k$="r0:FOO.msg="+no$+".msg":gosub 4060
 3930 k$="c0:FOO.rcd=FOO.old,FOO.msg":gosub 4060
 3940 k$="s0:FOO.old":gosub 4060
 3950 k$="s0:FOO.msg":gosub 4060
 3960 k$="r0:"+no$+".rcd=FOO.rcd":gosub 4060
 3970 goto 3990
 3980 k$="r0:"+no$+".rcd="+no$+".msg":gosub 4060
 3990 return
 4000 rem
 4010 rem laheta levykomento
 4020 rem k$=komento
 4030 rem
 4040 rem adminille myos kaiutetaan
 4050 rem
 4060 open 1,8,15:if pr$="*" then print k$
 4070 print#1,k$:input#1,z,z$,zz,zx
 4080 if pr$="*" then print z;" ";z$
 4090 close 1:forx=1to1000:next:return
 4100 rem
 4110 rem arkistoi julkiset viestit
 4120 rem
 4130 input"Arkistoinko";t$:if t$<>"k" and t$<>"K" then goto 3990
 4140 r$="ALL.msg,s,r"
 4150 no$="ALL"
 4160 open 2,8,2,r$:close 2:open 15,8,15:input#15,z,z$,zz,zx:close 15
 4170 if z then goto 3820
 4180 goto 3830
 4190 print"ei ole julkisia viesteja!":goto 3990
 4200 print"Arkistoin, hetki..."
 4210 r$=no$+".rcd,s,r"
 4220 open 2,8,2,r$:close 2:open 15,8,15:input#15,z,z$,zz,zx:close 15
 4230 if z=0 then goto 4280
 4240 goto 4340
 4250 rem
 4260 rem swappaa vanhan peraan
 4270 rem
 4280 k$="r0:"+no$+".old="+no$+".rcd":gosub 4060
 4290 k$="c0:"+no$+".rcd="+no$+".old,"+no$+".msg":gosub 4060
 4300 k$="s0:"+no$+".old":gosub 4060
 4310 goto 3990
 4320 k$="r0:"+no$+".rcd="+no$+".msg":gosub 4060
 4330 return
 4340 k$="r0:"+no$+".rcd="+no$+".msg":gosub 4060
 4350 return
 4360 rem logo ************************
 4370 print"{clr} {orng}{CBM-A}@@@@{CBM-S} {wht}{CBM-A}@{CBM-A}@{CBM-S}{CBM-A}@{CBM-S}{CBM-A}@{CBM-S}{CBM-A}@{CBM-S}{CBM-A}@"
 4380 print" {orng}{CBM-Z}{CBM-S}{yel}**{orng}{CBM-A}{CBM-X} {cyn}] {CBM-Q}@{CBM-W}{CBM-Q}@{CBM-W}{CBM-Q}@{CBM-X}{CBM-Q}@{CBM-W}]"
 4390 print"  {orng}]  ]  {lblu}{CBM-Z}{CBM-S}] ]] ]]  ] ]{CBM-Z}{CBM-S}{blu}Made in Finland"
 4400 print"  {orng}]  ]   {gry3}]] ]] ]]  ] ] ] {rvon}{wht} {blu} {wht}   {rvof} {lgrn}by"
 4410 print"  {orng}]  {CBM-Z}{CBM-S} {gry2}@{CBM-X}    {gry1}BOOT    {gry2}@{CBM-X} {rvon}{blu}     {rvof} {lblu}MALLORCA"
 4420 print"  {orng}]{CBM-A}{CBM-S} {CBM-Z}@@{CBM-S}               {rvon}{wht} {blu} {wht}   {rvof} {lblu}SOFT"
 4430 print"  {orng}{CBM-Z}{CBM-X}{CBM-Z}@@@@{CBM-X}{gry3}{pur} ";ve$;"{lgrn} last ed {gry3}";ed$
 4440 rem print" {grn}Copyright (c) Urpo Lankinen 1991-1996"
 4450 rem print" {blu}All rights reserved{gry3}"
 4460 print"{yel}   {rvon} BROUGHT{$a0}TO{$a0}YOU{$a0}BY: {rvof}{gry3}"
 4470 print"{down}    {gry2}Urpo {lgrn}WwW-Wolf{gry2} Lankinen{gry3}"
 4480 print"      File access, mail engine, boot"
 4490 print"      engine, rest of engines"
 4500 print"      and all the dirty job"
 4510 print"      = I did nearly everything..."
 4520 print"{down}    {gry2}Mikko {lblu}Okkim{gry2} Tormanen{gry3}"
 4530 print"      He invented diary system"
 4540 print"      and created games."
 4550 get fp$: if fp$="" goto 4550
 4560 return
 4570 rem
 4580 rem sysoppi lukee kauttajan postit
 4590 rem
 4600 print"{clr}Anna kayttajan nimi:"
 4610 input y$
 4620 print"{clr}";
 4630 r$=left$(y$,12)+".msg,s,r"
 4640 open 2,8,2,r$:close 2:open 15,8,15:input#15,z,z$,zz,zx:close 15
 4650 if z then goto 3490
 4660 open 2,8,2,r$
 4670 get#2,f$:print f$;
 4680 if st<>64 goto 4670
 4690 close 2
 4700 goto 2290:rem sysop menu
 4710 rem
 4720 rem lue postiarkisto
 4730 rem
 4740 print"{clr}";
 4750 r$=left$(n$,12)+".rcd,s,r"
 4760 open 2,8,2,r$:close 2:open 15,8,15:input#15,z,z$,zz,zx:close 15
 4770 if z then goto 3490
 4780 open 2,8,2,r$
 4790 get#2,f$:print f$;
 4800 if st<>64 goto 4790
 4810 close 2
 4820 rem
 4830 rem poista postiarkisto
 4840 rem
 4850 input"{wht}{down}Poistanko{gry3}";an$
 4860 r$=left$(n$,12)+".rcd"
 4870 if an$<>"k" and an$<>"K" goto 4890
 4880 goto 4910
 4890 open 15,8,15
 4900 print#15,"s0:";r$:close 15
 4910 goto 1330
 4920 r$="ALL.rcd":goto 4890
 4930 rem
 4940 rem sysoppi tekee selvaa jalkea
 4950 rem duunarin postiarkistoista...
 4960 rem
 4970 input"Kayttajanimi";y$
 4980 r$=left$(y$,12)+".rcd"
 4990 print"Oletko nyt AIVAN varma?"
 5000 print"Meinaan, han ei varmaankaan"
 5010 print"ihan tykkaa siita."
 5020 input"siis 'K' jos joo.";y$
 5030 if y$<>"K" then return
 5040 open 15,8,15:print#15,"s0:";r$:close 15
 5050 return