Ihre Browserversion ist veraltet. Wir empfehlen, Ihren Browser auf die neueste Version zu aktualisieren.

Turbo Pascal 3.0

Listing of SPACE.PAS


1: 0 FUNCTION Freier_Diskettenplatz(Laufwerk:byte):integer;
2: 0 (* fuer CP/M + bzw. CP/M 3.0 und hoeher *)
3: 0 TYPE DMA_Puffer=RECORD

4: 1 Anzahl_der_Records_low:integer;

5:1 Anzahl_der_Records_high:byte;

6:1Fueller:ARRAY[0..124] OF byte;

7: 1 END;

8: 0 VAR p:^DMA_Puffer;

9: 0 BEGIN

10:1 new(p);

11:1 bdos(26,ord(p));

12:1IF Laufwerk=O THEN Laufwerk:=bdos(25)+1;

13:1 bdos(46,Laufwerk-1);

14:1 Freier_Diskettenplatz:=p^.Anzahl_der_Records_low SHR 3
15:1 +p^.Anzahl_der_Records_high SHL 13;
16:1 dispose(p);

17:1END;

18:0

19: 0 BEGIN

20: 1 write(Freier_Diskettenplatz(0));

21: 1 END.

8251 (z.B. TA-PC)

function ZeichenVorhanden:boolean;
begin

ZeichenVorhanden:=BIT(1,PORT[$41])

end;

funktion DarfSenden:boolean;

begin

DarfSenden:=BIT(0,PORT[$41])

end;



Z80-SIO (z.B. BONDWELL 14)

function ZeichenVorhanden:boolean;

begin

ZeichenVorhanden:=BIT(2,PORT[$41])

end;


function DarfSenden:boolean;

begin

DarfSenden:=BIT(0,PORT[$41])

end;

function ZeichenVorhanden:boolean;

begin

ZeichenVorhanden:=MEM[xyz]>0

end;



Listing of CPM-80.BIB

1:0 (******************************************************************************)

2: 0 (* Bibliotheks-Modul CPM-80.BIB *)

3: 0 (* Wichtige Betriebssystem-Prozeduren fuer CPM-80 *)

4: 0 (* Laufwerkscode : 0=Bezugslaufwerk, 1=A:, 2=B ... *)

5: 0 (* c SpeicherEinheit (real) fuer MemAvail und MaxAvail *)

6: 0 (* p DiskReset setzt Disketensystem zurueck *)

7: 0 (* p DiskAnmelden(d) definiert d als Bezugslaufwerk *)

8: 0 (* f Aktlaufwerk gibt Bezugslaufwerk zurueck *)

9: 0 (* f ErsterEintrag(FCB,DMA):byte sucht ersten Directory-Eintrag, der auf *)

10: 0 (* den File-Control-Block passt. Ergebnis in DMA, falls Wert255 *)

11: 0 (* f NaechsterEintrag:byte sucht naechsten passenden Eintrag *)

12: 0 (****************************************************************************)

13: 0

14: 0 CONST SpeicherEinheit 1.0; {wird gebraucht fuer MemAvail etc.}

15: 0

16: 0 PROCEDURE DiskReset;

17: 0 BEGIN

18: 1 BDOS(13)

19: 1 END;

20: 0

21: 0 PROCEDURE DiskAnmelden(drive:byte);

22: 0 BEGIN

23: 1 IF drive>0 THEN BDOS(14,(drive-1) AND 15)

24: 1 END;

25: 0

26: 0 FUNCTION AktLaufwerk : byte;

27: 0 BEGIN

28: 1 AktLaufwerk:=BDOS(25)+1

29: 1 END;

30: 0

31: 0 FUNCTION ErsterEintrag(VAR FCB; VAR DMA) : byte;

32: 0 BEGIN

33: 1 BDOS(26,addr(DMA));

34: 1 ErsterEintrag:=BDOS(17,addr(FCB))

35: 1 END;

36: 0

37: 0 FUNCTION NaechsterEintrag : byte;

38: 0 BEGIN

39: 1 NaechsterEintrag:=BDOS(18)

40: 1 END;



Listing of PUFFER.BIB

1: 0 (****************************************************************************)

2: 0 (* Bibliotheks-Modul PUFFER.BIB *)

3: 0 (* Listenoperationen fuer Puffer-Listen *)

4: 0 (* Setzt das Vorhandensein des Typs 'Pufferinhalt' varaus *)

5: 0 (* (t Puffer definiert einer FIFO-Speicherstruktur) *)

6: 0 (* (t PufferEintrag) *)

7: 0 (* (v PufferAnfang, PufferEnde : Puffer) *)

8: 0 (* f PufferVoll : boolean wird wahr, wenn Puffer ueberlauft *)

9: 0 (* v PufferLeer : boolean wird wahr, wenn kein Element im Puffer *)

10: 0 (* p InitPuffer initialister PufferAnfang- und Ende sowie Pufferleer *)

11: 0 (* p SchreibInPuffer(E : Pufferinhalt) prueft nicht auf Ueberlauf *)

12: 0 (* p HolVonPuffer(var E : Pufferinhalt) E undefiniert, falls PufferLeer *)

13: 0 (* Alle drei Prozeduren veraendern PufferVoll und PufferLeer *)

14: 0

15: 0

16: 0 TYPE Puffer = APufferEintrag;

17: 0 PufferEintrag = RECORD

18: 1 Eintrag : Pufferinhalt;

19: 1 Naechster : Puffer

20: 1 END;

21: 0

22: 0 VAR PufferAnfang,

23: 0 PufferEnde : Puffer;

24: 0 PufferLeer : boolean;

25: 0

26: 0 FUNCTION PufferVoll : boolean;

27: 0 CONST MemEinheit = 16.0; (*1.0 bei CP/M-80*)

28: 0 VAR PufferAvail : real;

29: 0 BEGIN

30: 1 IF MemAvail
31: 1 THEN PufferAvail:=MemEinheit*(65536.0+MemAvail)

32: 1 ELSE PufferAvail:=MemEinheit*MemAvail;

33: 1 Puf ferVoll:=Puf ferAvail
34: 1 END;

35: 0

36: 0 PROCEDURE InitPuffer;

37: 0 BEGIN

38: 1 PufferAnfang:=NIL; PufferEnde:=NIL; PufferLeer:=true;

39: 1 END;

40: 0

41: 0 PROCEDURE SchreibInPuffer(E : Pufferinhalt);

42: 0 VAR p : Puffer;

43: 0 BEGIN

44: 1 IF NOT PufferVoll THEN

45: 1 BEGIN

46: 2 new(p); PufferLeer:=false;

47: 2 WITH p^ DO BEGIN Eintrag:=E; Naechster:=NIL END;

48: 2 IF PufferEndeNIL

49: 2 THEN PufferEnde^.Naechster=p

50: 2 ELSE IF PufferAnfangNIL THEN PufferAnfangA.Naechster:=p

51: 2 ELSE PufferAnfang:=p;

52: 2 PufferEnde:=p

53: 2 END

54: 1 END;

55: 0

56: 0 PROCEDURE HolVonPuffer(VAR E : Pufferinhalt);

57: 0 VAR p : Puffer;

58: 0 BEGIN

59: 1 IF PufferAnfang=NIL

60: 1 THEN PufferLeer:=true

61: 1 ELSE BEGIN

62: 2 p:=PufferAnfang; E:=p^.Eintrag; PufferAnfang:=p^.Naechster;

63: 2 dispose(p); PufferLeer:=PufferAnfang=NIL;

64: 2 IF PufferLeer THEN PufferEnde:=NIL

65: 2 END

66: 1 END;