home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / tp_util / graphwin.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-02-13  |  3.1 KB  |  145 lines

  1.  
  2. UNIT GRAPHWIN;
  3.  
  4.  
  5. INTERFACE
  6.  
  7.  
  8. USES  TPCRT,DOS,GRAPH;
  9.  
  10.  
  11. TYPE  WINTYPE  = (WOPEN,WCLOSE);
  12.  
  13. TYPE  FONTTYPE = (GROSS,KLEIN);
  14.  
  15.  
  16. PROCEDURE TWINDOW(W,H:WORD;WAS:WINTYPE;TITEL:STRING);
  17.  
  18. FUNCTION  CHRHIG:BYTE; { ZEICHENHÖHE IN PIXEL }
  19. FUNCTION  NCHARS:BYTE; { ANZAHL ZEICHEN PRO ZEILE }
  20. FUNCTION  NLINES:BYTE; { ANZAHL ZEILEN PRO BILDSCHIRM }
  21. PROCEDURE LOADFONT(T:FONTTYPE);
  22.  
  23.  
  24.  
  25. IMPLEMENTATION
  26.  
  27.  
  28. VAR   VS      : VIEWPORTTYPE;
  29.       SAVSCR  : POINTER;
  30.  
  31.  
  32. PROCEDURE TWINDOW(W,H:WORD;WAS:WINTYPE;TITEL:STRING);
  33. VAR   XN1,YN1,XN2,YN2  : WORD;
  34.       XW1,YW1,XW2,YW2  : WORD;
  35.       SIZE             : WORD;
  36.       I                : INTEGER;
  37. BEGIN
  38.   INC(W); INC(H);
  39.   XW1 := ((NCHARS-W) DIV 2) + 1;
  40.   XW2 := XW1 + W;
  41.   YW1 := ((NLINES-H) DIV 2);
  42.   YW2 := YW1 + H;
  43.   XN1 := (XW1-1) * 8;
  44.   XN2 := XW2 * 8;
  45.   YN1 := (YW1-1) * CHRHIG;
  46.   YN2 := YW2 * CHRHIG;
  47.   SIZE := IMAGESIZE(XN1,YN1,XN2,YN2);
  48.   CASE WAS OF
  49.   WOPEN : BEGIN
  50.       IF MAXAVAIL < SIZE THEN BEGIN
  51. {@@@}
  52. (*
  53.         ALERT('zu wenig Speicher');
  54. *)
  55. WRITELN;
  56. WRITELN(' *** ZU WENIG SPEICHER *** ');
  57.         EXIT;
  58.       END;
  59.       GETVIEWSETTINGS(VS);
  60.       SETVIEWPORT(0,0,GETMAXX,GETMAXY,CLIPON);
  61.       GETMEM(SAVSCR,SIZE);
  62.       GETIMAGE(XN1,YN1,XN2,YN2,SAVSCR^);
  63.       SETVIEWPORT(XN1,YN1,XN2,YN2,CLIPON);
  64.       CLEARVIEWPORT;
  65.       SETVIEWPORT(XN1+8,YN1+CHRHIG,XN2-8,YN2-CHRHIG,CLIPON);
  66.  
  67.       WINDOW(XW1,YW1,XW2,YW2+1);
  68.       GOTOXY(1,1);
  69.       WRITE('╔'); FOR I := 2 TO W DO WRITE('═'); WRITE('╗');
  70.       FOR I := 2 TO H+1 DO BEGIN
  71.         GOTOXY(1,I);   WRITE('║');
  72.         GOTOXY(W+1,I); WRITE('║');
  73.       END;
  74.       GOTOXY(1,H+1);
  75.       WRITE('╚'); FOR I := 2 TO W DO WRITE('═'); WRITE('╝');
  76.       IF LENGTH(TITEL) > 0 THEN BEGIN
  77.         GOTOXY(SUCC((SUCC(W)-LENGTH(TITEL))) SHR 1,1);
  78.         WRITE(' ',TITEL,' ');
  79.       END;
  80.       WINDOW(XW1+1,YW1+1,XW2-1,YW2-1);
  81.     END;
  82.   WCLOSE : BEGIN
  83.       WINDOW(1,1,NCHARS,NLINES);
  84.       SETVIEWPORT(0,0,GETMAXX,GETMAXY,CLIPON);
  85.       PUTIMAGE(XN1,YN1,SAVSCR^,NORMALPUT);
  86.       FREEMEM(SAVSCR,SIZE);
  87.       SETVIEWPORT(VS.X1,VS.Y1,VS.X2,VS.Y2,VS.CLIP);
  88.     END;
  89.   END; { CASE }
  90. END;
  91.  
  92.  
  93. (* ****************************************************************** *)
  94. {
  95.     FUNKTIONEN ÜBER BIOS- RAM
  96. }
  97.  
  98. FUNCTION CHRHIG:BYTE; { ZEICHENHÖHE IN PIXEL }
  99. BEGIN
  100.   CHRHIG := MEM[$40:$85];
  101. END;
  102.  
  103. FUNCTION NCHARS:BYTE; { ANZAHL ZEICHEN PRO ZEILE }
  104. BEGIN
  105.   NCHARS := MEM[$40:$4A];
  106. END;
  107.  
  108. FUNCTION NLINES:BYTE; { ANZAHL ZEILEN PRO BILDSCHIRM }
  109. BEGIN
  110.   NLINES := SUCC(MEM[$40:$84]);
  111. END;
  112.  
  113.  
  114. (* ****************************************************************** *)
  115. {
  116.     FUNKTIONEN ÜBER INT 10H
  117. }
  118.  
  119.  
  120. PROCEDURE LOADFONT(T:FONTTYPE);
  121. VAR   R  : REGISTERS;
  122. BEGIN
  123.   WITH R DO BEGIN
  124.     AH := $11;
  125.     CASE T OF
  126.       GROSS : BEGIN
  127.                 AL := $22;    { 8 * 14 ZEICHENSATZ }
  128.                 MEM[$40:$84] := 24;
  129.               END;
  130.       KLEIN : BEGIN
  131.                 AL := $23;    { 8 * 8 ZEICHENSATZ }
  132.                 MEM[$40:$84] := 42;
  133.               END;
  134.     END; { CASE }
  135.     BL := $00;
  136.     DL := NLINES;  { ANZAHL ZEILEN }
  137.     INTR($10,R); { BIOS }
  138.   END; { WITH }
  139. END;
  140.  
  141.  
  142.  
  143. END.
  144.  
  145.