home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 09 / grafik6 / seghand.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-07-06  |  4.2 KB  |  123 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                             SEGHAND.PAS                                 *)
  3. (*             Routinen zur "Segment"-Verwaltung mehrerer                  *)
  4. (*                    "Display-Files" der Grafikserie                      *)
  5. (*-------------------------------------------------------------------------*)
  6. (*                     Segmentsystem initialisieren                    *)
  7.  
  8. PROCEDURE InitSeg;
  9.  
  10. VAR i : SegNrBereich;
  11.  
  12. BEGIN
  13.   FOR i := 1 TO MaxSeg DO
  14.     SegTab[i].DFP := NIL    (* Der Zeiger auf das DF dient als Indikator *)
  15. END;                        (* ob das Segment geoeffnet ist oder nicht.  *)
  16.  
  17. (*---------------------------------------------------------------------*)
  18. (* "Segment" eroeffnen. Die Funktion gibt ein freies "Handle" zurueck. *)
  19. (*             Bei Misserfolg wird "NULL" zurueckgegeben.              *)
  20.  
  21. FUNCTION OpenSeg(Eintraege : tDFArray) : SegNrBereich;
  22.  
  23. VAR i, Handle : SegNrBereich;
  24.  
  25. BEGIN
  26.   Handle := NULL;
  27.   FOR i := MaxSeg DOWNTO 1 DO
  28.     IF SegTab[i].DFP = NIL THEN
  29.       Handle := i;
  30.   IF Handle <> NULL THEN  (* Ansonsten nichts mehr frei *)
  31.     WITH SegTab[Handle] DO BEGIN
  32.       sichtbar := TRUE;
  33.       TransFolge := 1;
  34.       XPos := 0;
  35.       YPos := 0;
  36.       XFaktor := 1;
  37.       YFaktor := 1;
  38.       XShear := 0;
  39.       YShear := 0;
  40.       Drehwinkel := 0;
  41.       Array_List(Eintraege,DFP);
  42.     END;
  43.   OpenSeg := Handle;
  44. END;
  45.  
  46. (*---------------------------------------------------------------------*)
  47. (*            "Segment" schliessen. Wenn das Segment nicht             *)
  48. (*               geoeffnet war, findet keine Aktion statt              *)
  49.  
  50. PROCEDURE CloseSeg(VAR Handle : SegNrBereich);
  51.  
  52. BEGIN
  53.   IF Handle <> NULL THEN
  54.     IF SegTab[Handle].DFP <> NIL (* Illegales Handle ? *) THEN
  55.       DeleteList(SegTab[Handle].DFP);
  56.   Handle := NULL;
  57. END;
  58.  
  59. (*---------------------------------------------------------------------*)
  60. (*           "Segment" erweitern. Die zusaetzlichen Eintraege          *)
  61. (*                  werden in das DF eingefuegt.                       *)
  62.  
  63. PROCEDURE ExtendSeg(Handle : SegNrBereich;
  64.                     wo : INTEGER; Eintraege : tDFArray);
  65.  
  66. BEGIN
  67.   IF Handle <> NULL THEN
  68.     IF SegTab[Handle].DFP <> NIL (* Illegales Handle ? *) THEN
  69.       InsertArrayInList(Eintraege, wo, SegTab[Handle].DFP)
  70. END;
  71.  
  72. (*---------------------------------------------------------------------*)
  73. (*                       "Segment" verkuerzen.                         *)
  74. (*   Die Eintraege von..bis werden aus dem assoziierten DF entfernt.   *)
  75. (* Wenn das DF gaenzlich geloescht wird, wird das Segment geschlossen. *)
  76.  
  77. PROCEDURE CutSeg(VAR Handle : SegNrBereich;
  78.                  von, bis : INTEGER);
  79.  
  80. BEGIN
  81.   IF Handle <> NULL THEN
  82.     IF SegTab[Handle].DFP <> NIL (* Illegales Handle ? *) THEN
  83.       DelListPart(von, bis, SegTab[Handle].DFP);
  84.   IF SegTab[Handle].DFP = NIL THEN
  85.     Handle := NULL;
  86. END;
  87.  
  88. (*---------------------------------------------------------------------*)
  89. (*                        "Segment" kopieren.                          *)
  90. (*   Kopiert gesammtes Segment von "From" nach "Too". Bei Misserfolg   *)
  91. (*               wird in Too "NULL" zurueckgegeben.                    *)
  92.  
  93. PROCEDURE CopySeg(From : SegNrBereich;
  94.                   VAR Too : INTEGER);
  95.  
  96. BEGIN
  97.   IF From = NULL THEN
  98.     Too := NULL
  99.   ELSE
  100.     IF SegTab[From].DFP <> NIL (* Illegales Handle ? *) THEN BEGIN
  101.       (* Freies Handle suchen lassen *)
  102.       DFInpArray[1].Kommando := EoDF;
  103.       Too := OpenSeg(DFInpArray);
  104.       IF Too <> NULL THEN
  105.         SegTab[Too] := SegTab[From];
  106.     END;
  107. END;
  108.  
  109. (*---------------------------------------------------------------------*)
  110. (*                     "Segment" ein-/ausschalten.                     *)
  111.  
  112. PROCEDURE OnOffSeg(Handle : SegNrBereich;
  113.                    OnSwitch : BOOLEAN);
  114.  
  115. BEGIN
  116.   IF Handle <> NULL THEN
  117.     IF SegTab[Handle].DFP <> NIL (* Illegales Handle ? *) THEN
  118.       SegTab[Handle].sichtbar := OnSwitch;
  119. END;
  120.  
  121. (*-------------------------------------------------------------------------*)
  122. (*                         Ende von SEGHAND.PAS                            *)
  123.