home *** CD-ROM | disk | FTP | other *** search
- (*-------------------------------------------------------------------------*)
- (* SEGHAND.PAS *)
- (* Routinen zur "Segment"-Verwaltung mehrerer *)
- (* "Display-Files" der Grafikserie *)
- (*-------------------------------------------------------------------------*)
- (* Segmentsystem initialisieren *)
-
- PROCEDURE InitSeg;
-
- VAR i : SegNrBereich;
-
- BEGIN
- FOR i := 1 TO MaxSeg DO
- SegTab[i].DFP := NIL (* Der Zeiger auf das DF dient als Indikator *)
- END; (* ob das Segment geoeffnet ist oder nicht. *)
-
- (*---------------------------------------------------------------------*)
- (* "Segment" eroeffnen. Die Funktion gibt ein freies "Handle" zurueck. *)
- (* Bei Misserfolg wird "NULL" zurueckgegeben. *)
-
- FUNCTION OpenSeg(Eintraege : tDFArray) : SegNrBereich;
-
- VAR i, Handle : SegNrBereich;
-
- BEGIN
- Handle := NULL;
- FOR i := MaxSeg DOWNTO 1 DO
- IF SegTab[i].DFP = NIL THEN
- Handle := i;
- IF Handle <> NULL THEN (* Ansonsten nichts mehr frei *)
- WITH SegTab[Handle] DO BEGIN
- sichtbar := TRUE;
- TransFolge := 1;
- XPos := 0;
- YPos := 0;
- XFaktor := 1;
- YFaktor := 1;
- XShear := 0;
- YShear := 0;
- Drehwinkel := 0;
- Array_List(Eintraege,DFP);
- END;
- OpenSeg := Handle;
- END;
-
- (*---------------------------------------------------------------------*)
- (* "Segment" schliessen. Wenn das Segment nicht *)
- (* geoeffnet war, findet keine Aktion statt *)
-
- PROCEDURE CloseSeg(VAR Handle : SegNrBereich);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL (* Illegales Handle ? *) THEN
- DeleteList(SegTab[Handle].DFP);
- Handle := NULL;
- END;
-
- (*---------------------------------------------------------------------*)
- (* "Segment" erweitern. Die zusaetzlichen Eintraege *)
- (* werden in das DF eingefuegt. *)
-
- PROCEDURE ExtendSeg(Handle : SegNrBereich;
- wo : INTEGER; Eintraege : tDFArray);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL (* Illegales Handle ? *) THEN
- InsertArrayInList(Eintraege, wo, SegTab[Handle].DFP)
- END;
-
- (*---------------------------------------------------------------------*)
- (* "Segment" verkuerzen. *)
- (* Die Eintraege von..bis werden aus dem assoziierten DF entfernt. *)
- (* Wenn das DF gaenzlich geloescht wird, wird das Segment geschlossen. *)
-
- PROCEDURE CutSeg(VAR Handle : SegNrBereich;
- von, bis : INTEGER);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL (* Illegales Handle ? *) THEN
- DelListPart(von, bis, SegTab[Handle].DFP);
- IF SegTab[Handle].DFP = NIL THEN
- Handle := NULL;
- END;
-
- (*---------------------------------------------------------------------*)
- (* "Segment" kopieren. *)
- (* Kopiert gesammtes Segment von "From" nach "Too". Bei Misserfolg *)
- (* wird in Too "NULL" zurueckgegeben. *)
-
- PROCEDURE CopySeg(From : SegNrBereich;
- VAR Too : INTEGER);
-
- BEGIN
- IF From = NULL THEN
- Too := NULL
- ELSE
- IF SegTab[From].DFP <> NIL (* Illegales Handle ? *) THEN BEGIN
- (* Freies Handle suchen lassen *)
- DFInpArray[1].Kommando := EoDF;
- Too := OpenSeg(DFInpArray);
- IF Too <> NULL THEN
- SegTab[Too] := SegTab[From];
- END;
- END;
-
- (*---------------------------------------------------------------------*)
- (* "Segment" ein-/ausschalten. *)
-
- PROCEDURE OnOffSeg(Handle : SegNrBereich;
- OnSwitch : BOOLEAN);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL (* Illegales Handle ? *) THEN
- SegTab[Handle].sichtbar := OnSwitch;
- END;
-
- (*-------------------------------------------------------------------------*)
- (* Ende von SEGHAND.PAS *)
-