function INKEY_dollar:char; (* BASIC Funktion INKEY$ *) var c : char; Begin if keypressed then read(kbd,c) else c:=nul; INKEY_dollar:=c; End; function INKEY_delay:char; var del : integer; Begin del:=succ(random(3500)); (* ANPASSUNG *) repeat del:=pred(del); until (keypressed or (del=0)); INKEY_delay:=INKEY_dollar; End; function STRING_dollar(l:byte;c:char):str255; (* BASIC Funktion STRING$ *) var i : integer; st : str255; Begin st:=''; for i:=1 to l do st:=st+(c); STRING_dollar:=st; End; function SPACE_dollar(b:byte):str255; (* BASIC Funktion SPACE$ *) Begin SPACE_dollar:=STRING_dollar(b,' '); End; function FNr(n1,n2:integer):integer; (* Laden einer Zufallszahl n1..n2 *) var dr : integer; Begin dr:=abs(n2-n1+1); if dr=0 then dr:=1; FNr:=random(dr)+n1; End; function FNrs:integer; (* Laden einer Zufallszahl *) Begin FNrs:=(FNr(2,41)*2)+1; End; function FNrza:integer; (* Laden einer Zufallszahl 8..27 *) Begin FNrza:=FNr(8,27); End; function FNrzab:integer; (* Laden einer Zufallszahl 8..26 *) Begin FNrzab:=FNr(8,26); End; (* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) (* Das urspruengliche BASIC Format fuer den Spielstand ist "Name",Zahl *) procedure writes(Name:str80;Punkte:integer); (* Namen und Punkte in Zeile schreiben *) Begin writeln(FI1,'"',Name,'",',Punkte); End; procedure inputs(var Name:str80;var Punkte:integer); (* Namen und Punkte aus Zeile holen *) var dummy, name_gold : str80; function NamenTeil:str80; var p : integer; procedure AnfangLoeschen(c:char); begin if name_gold[1]=c then delete(name_gold,1,1); end; begin { NamenTeil } AnfangLoeschen('"'); p:=pos('"',name_gold); if p=0 then p:=pos(',',name_gold); if p=0 then p:=succ(length(name_gold)); dummy:=copy(name_gold,1,pred(p)); delete(name_gold,1,p); AnfangLoeschen(','); NamenTeil:=dummy; end; function Stand:integer; var x, r : integer; begin if name_gold='' then name_gold:='0'; val(name_gold,x,r); if r<>0 then x:=0; Stand:=x; end; Begin { inputs } readln(FI1,name_gold); Name:=NamenTeil; Punkte:=Stand; End; (* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *) procedure l_90; (* Einlesen der Spielstanddatei *) var n : integer; Begin assign(FI1,Geistername); {$I-}reset(FI1){$I+}; if IOResult=0 then begin for n:=1 to 10 do inputs(name_dollar[n],gold[n]); close(FI1); end else begin for n:=1 to 10 do begin name_dollar[n]:='NOBODY'; gold[n]:=0; end; end; End; function FNc_dollar(z,s:integer):str4; (* Cursor positionieren *) function COff(x:byte):char; begin COff:=chr(32+x); end; Begin { FNc_dollar } FNc_dollar:=esc_dollar+'Y'+COff(z)+COff(s); End; function UPPER_dollar(m:str80):str80; (* BASIC Funktion UPPER$ *) var i : integer; mm : str80; Begin mm:=''; for i:=1 to length(m) do mm:=mm+upcase(m[i]); UPPER_dollar:=mm; End; function FNreq_dollar(zx,sx,bx,t1,t2x:integer):str255; (* Textfenster mit Text und Abfrage ausgeben *) const z = 14; s = 32; b = 21; t2 = 3; var mz : integer; function FNr0_dollar(r:integer):str255; (* Rahmen ausgeben *) begin FNr0_dollar:=FNc_dollar(mz,s)+chr(r)+STRING_dollar(b+2,#154)+chr(r+6); mz:=succ(mz); end; function FNr1_dollar(t:integer):str255; (* Textzeile ausgeben *) begin FNr1_dollar:=FNc_dollar(mz,s)+#149+' '+invan_dollar+text_dollar[t]+invaus_dollar+' '+#149; mz:=succ(mz); end; function FNra_dollar:str255; (* Erste Meldung ausgeben *) begin FNra_dollar:=FNr0_dollar(150)+FNr1_dollar(5)+FNr1_dollar(t1)+FNr1_dollar(5); end; function FNrb_dollar:str255; (* Zweite Meldung ausgeben *) begin FNrb_dollar:=FNr1_dollar(t2)+FNr1_dollar(5)+FNr0_dollar(147); end; Begin { FNreq_dollar } mz:=z; FNreq_dollar:=FNra_dollar+FNrb_dollar; End; function FNcla_dollar(z,s:integer):str255; (* Zweifachelement loeschen *) Begin FNcla_dollar:=FNc_dollar(z,s)+' '; End; function FNclab_dollar(z,s:integer):str255; (* Vierfachelement loeschen *) Begin FNclab_dollar:=FNcla_dollar(z,s)+ FNcla_dollar(z+1,s); End; function FNseta_dollar(z,s,c:integer):str255; (* Zweifachelement setzen *) Begin FNseta_dollar:=FNc_dollar(z,s)+chr(c)+chr(c+1); End; function FNsetab_dollar(z,s,c:integer):str255; (* Vierfachelement setzen *) Begin FNsetab_dollar:=FNseta_dollar(z,s,c)+ FNseta_dollar(z+1,s,c+2); End; function FNga_dollar(z,s:integer):str255; (* Geist Bild 1 setzen *) Begin FNga_dollar:=FNsetab_dollar(z,s,172); End; function FNgacl_dollar(exz,exs,z,s:integer):str255; (* Geist Bild 1 bewegen *) Begin ein_dollar:=INKEY_dollar; FNgacl_dollar:=FNclab_dollar(exz,exs)+ FNga_dollar(z,s); End; function FNgb_dollar(z,s:integer):str255; (* Geist Bild 2 setzen *) Begin FNgb_dollar:=FNsetab_dollar(z,s,176); End; function FNgbcl_dollar(exz,exs,z,s:integer):str255; (* Geist Bild 2 bewegen *) Begin ein_dollar:=INKEY_dollar; FNgbcl_dollar:=FNclab_dollar(exz,exs)+ FNgb_dollar(z,s); End; function FNha_dollar(z,s:integer):str255; (* Spieler Bild 1 setzen *) Begin FNha_dollar:=FNsetab_dollar(z,s,180); End; function FNhacl_dollar(exz,exs,z,s:integer):str255; (* Spieler Bild 1 bewegen *) Begin ein_dollar:=INKEY_dollar; FNhacl_dollar:=FNclab_dollar(exz,exs)+ FNha_dollar(z,s); End; function FNhb_dollar(z,s:integer):str255; (* Spieler Bild 2 setzen *) Begin FNhb_dollar:=FNsetab_dollar(z,s,184); End; function FNhbcl_dollar(exz,exs,z,s:integer):str255; (* Spieler Bild 2 bewegen *) Begin ein_dollar:=INKEY_dollar; FNhbcl_dollar:=FNclab_dollar(exz,exs)+ FNhb_dollar(z,s); End; function FNgoa_dollar(z,s:integer):str255; (* Muenze setzen *) Begin FNgoa_dollar:=FNseta_dollar(z,s,188); End; function FNgob_dollar(z,s:integer):str255; (* Schraegstrich setzen *) Begin FNgob_dollar:=FNseta_dollar(z,s,190); End; function FNaka_dollar(z,s:integer):str255; (* Kleines Kreuz setzen *) Begin FNaka_dollar:=FNsetab_dollar(z,s,192); End; function FNakb_dollar(z,s:integer):str255; (* Grosses Kreuz setzen *) Begin FNakb_dollar:=FNsetab_dollar(z,s,196); End; function FNua_dollar(z,s:integer):str255; (* Volle Eieruhr setzen *) Begin FNua_dollar:=FNsetab_dollar(z,s,200); End; function FNub_dollar(z,s:integer):str255; (* Leere Eieruhr setzen *) Begin FNub_dollar:=FNsetab_dollar(z,s,204); End; procedure l_50; (* Copyrighttext und Titel zusammenstellen *) var n : integer; Begin co_dollar:=''; for n:=0 to 15 do co_dollar:=co_dollar+chr(n+240); for n:=0 to 19 do t_dollar[n+1]:=chr(n+219)+' '; t1_dollar:=t_dollar[ 1]+t_dollar[ 3]+t_dollar[ 5]+t_dollar[ 7]+t_dollar[ 9]+t_dollar[3]+ t_dollar[11]+t_dollar[13]+t_dollar[15]+t_dollar[17]+t_dollar[19]; t2_dollar:=t_dollar[ 2]+t_dollar[ 4]+t_dollar[ 6]+t_dollar[ 8]+t_dollar[10]+t_dollar[4]+ t_dollar[12]+t_dollar[14]+t_dollar[16]+t_dollar[18]+t_dollar[20]; End;