home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9101 / forum / frame.pas
Encoding:
Pascal/Delphi Source File  |  1991-10-08  |  6.2 KB  |  193 lines

  1. (*--------------------------------------------------------*)
  2. (*                       FRAME.PAS                        *)
  3. (*           VERSION NUR FÜR TURBO-PASCAL 6.0             *)
  4. (* Turbo-Pascal 3.0-Version siehe DOS-Extra 2, S. 24 - 26 *)
  5. (* Copyright 1988, 1991 J. Dirbach, J. Braun & DMV-Verlag *)
  6. (*--------------------------------------------------------*)
  7.  
  8. PROGRAM Frame;
  9.  
  10. USES Crt;                                   (* Für ClrScr *)
  11.  
  12. VAR
  13.   i: BYTE;
  14.  
  15. PROCEDURE Frame1(x1, x2, y1, y2, attr, typ: BYTE);
  16. BEGIN
  17.   ASM
  18.      (* Zeichensatz auf Stack initialisieren *)
  19.      MOV   AL, typ      (* Zeichensatz in AX laden *)
  20.      CMP   AL,1         (* Zeichensatz 1 ? *)
  21.      JNZ   @zeich2      (* Zeichensatz <> 1 *)
  22.      MOV   AX,218       (* ┌ *)
  23.      PUSH  AX
  24.      MOV   AX,191       (* ┐ *)
  25.      PUSH  AX
  26.      MOV   AX,192       (* └ *)
  27.      PUSH  AX
  28.      MOV   AX,217       (* ┘ *)
  29.      PUSH  AX
  30.      MOV   AX,179       (* │ *)
  31.      PUSH  AX
  32.      MOV   AX,196       (* ─ *)
  33.      PUSH  AX
  34.      JMP   @z_end       (* Zeichensatz 1 geladen *)
  35.  
  36.   @zeich2:
  37.      CMP   AL, 2        (* Zeichensatz 2 ? *)
  38.      JNZ   @zeich3      (* Zeichensatz <> 2 *)
  39.      MOV   AX,201       (* ╔ *)
  40.      PUSH  AX
  41.      MOV   AX,187       (* ╗ *)
  42.      PUSH  AX
  43.      MOV   AX,200       (* ╚ *)
  44.      PUSH  AX
  45.      MOV   AX,188       (* ╝ *)
  46.      PUSH  AX
  47.      MOV   AX,186       (* ║ *)
  48.      PUSH  AX
  49.      MOV   AX,205       (* ═ *)
  50.      PUSH  AX
  51.      JMP   @z_end       (* Zeichensatz 2 geladen *)
  52.  
  53.   @zeich3:
  54.      CMP   AL,3         (* Zeichensatz 3 ? *)
  55.      JNZ   @zeich4      (* Zeichensatz <> 3 *)
  56.      MOV   AX,213       (* ╒ *)
  57.      PUSH  AX
  58.      MOV   AX,184       (* ╕ *)
  59.      PUSH  AX
  60.      MOV   AX,212       (* ╘ *)
  61.      PUSH  AX
  62.      MOV   AX,190       (* ╛ *)
  63.      PUSH  AX
  64.      MOV   AX,179       (* │ *)
  65.      PUSH  AX
  66.      MOV   AX,205       (* ═ *)
  67.      PUSH  AX
  68.      JMP   @z_end       (* Zeichensatz 3 geladen *)
  69.  
  70.   @zeich4:
  71.      MOV   AX,214       (* ╓ *)
  72.      PUSH  AX
  73.      MOV   AX,183       (* ╖ *)
  74.      PUSH  AX
  75.      MOV   AX,211       (* ╙ *)
  76.      PUSH  AX
  77.      MOV   AX,189       (* ╜ *)
  78.      PUSH  AX
  79.      MOV   AX,186       (* ║ *)
  80.      PUSH  AX
  81.      MOV   AX,196       (* ─ *)
  82.      PUSH  AX           (* Zeichensatz 4 geladen *)
  83.  
  84.   @z_end:  (* Rahmen zeichnen *)
  85.  
  86.      (* linke untere Ecke zeichnen *)
  87.      MOV   DH, y2       (* Zeile y2 *)
  88.      MOV   DL, x1       (* Spalte x1 *)
  89.      MOV   BH, 0        (* Bildschirmseite BH # *)
  90.      MOV   AH, 2        (* Code-Nr 2 *)
  91.      INT   10h          (* Cursor auf x1, y2 *)
  92.      MOV   CX, 1        (* ein Zeichen *)
  93.      MOV   AL,[BP - 6]  (* ASCII '└' *)
  94.      MOV   BL, attr     (* Attribut # *)
  95.      MOV   AH, 9        (* Code-Nr 9 *)
  96.      INT   10h          (* Zeichen ausgeben *)
  97.  
  98.      (* untere horizontale Linie zeichnen *)
  99.      INC   DL           (* eine Spalte weiter *)
  100.      MOV   AH, 2        (* Code-Nr 2 *)
  101.      INT   10h          (* Cursor auf x1 + 1, y2 *)
  102.      MOV   AX, WORD(x2) (* AX = x2 *)
  103.      SUB   AX, WORD(x1) (* AX = AX - x1 *)
  104.      DEC   AX           (* AX = AX - 1 *)
  105.      MOV   CX, AX       (* Anzahl der '─' Zeichen *)
  106.      MOV   AL, [BP -12] (* ASCII '─' *)
  107.      MOV   AH, 9        (* Code-Nr 9 *)
  108.      INT   10h          (* Zeichen ausgeben *)
  109.  
  110.      (* rechte untere Ecke zeichnen *)
  111.      MOV   DL, x2       (* Spalte x2 *)
  112.      MOV   AH,2         (* Code-Nr 2 *)
  113.      INT   10h          (* Cursor auf x2, y2 *)
  114.      MOV   CX,1         (* ein Zeichen *)
  115.      MOV   AL,[BP-8]    (* ASCII '┘' *)
  116.      MOV   AH,9         (* Code-Nr 9 *)
  117.      INT   10h          (* Zeichen ausgeben *)
  118.  
  119.      (* rechte vertikale Linie zeichnen *)
  120.      DEC   DH           (* eine Zeile höher *)
  121.      MOV   AH,2         (* Code-Nr 2 *)
  122.      INT   10h          (* Cursor auf x2, y2 - 1 *)
  123.      MOV   AL,[BP-10]   (* ASCII '│' *)
  124.   @LOOP1:
  125.      MOV   CX,1         (* ein Zeichen *)
  126.      MOV   AH,9         (* Code-Nr 9 *)
  127.      INT   10h          (* Zeichen ausgeben *)
  128.      DEC   DH           (* eine Zeile höher *)
  129.      MOV   AH,2         (* Code-Nr 2 *)
  130.      INT   10h          (* Cursor auf x2, DH *)
  131.      MOV   AH, y1       (* vergleichswert y1 *)
  132.      CMP   AH,DH        (* DH - AH *)
  133.      JNZ   @LOOP1       (* zf <> 0 : LOOP1 *)
  134.  
  135.      (* rechte obere Ecke zeichnen *)
  136.      MOV   CX,1         (* ein Zeichen *)
  137.      MOV   AL,[BP-4]    (* ASCII '┐' *)
  138.      MOV   AH,9         (* Code-Nr 9 *)
  139.      INT   10h          (* Zeichen ausgeben *)
  140.  
  141.      (* linke vertikale Linie zeichnen *)
  142.      MOV   DH, y2       (* Zeile y2 *)
  143.      DEC   DH           (* Zeile y2 - 1 *)
  144.      MOV   DL, x1       (* Spalte x1 *)
  145.      MOV   AH,2         (* Code-Nr 2 *)
  146.      INT   10h          (* Cursor auf x1, y2 - 1 *)
  147.      MOV   AL,[BP-10]   (* ASCII '│' *)
  148.  
  149.   @LOOP2:
  150.      MOV   CX,1         (* 1 Zeichen *)
  151.      MOV   AH,9         (* Code-Nr 9 *)
  152.      INT   10h          (* Zeichen ausgeben *)
  153.      DEC   DH           (* Zeilenregister - 1 *)
  154.      MOV   AH,2         (* Code-Nr 2 *)
  155.      INT   10h          (* Cursor auf x1, DH *)
  156.      MOV   AH,y1        (* Vergleichswert y1 *)
  157.      CMP   AH,DH        (* DH - AH *)
  158.      JNZ   @LOOP2       (* zf <> 0 : LOOP2 *)
  159.  
  160.      (* linke obere Ecke zeichnen *)
  161.      MOV   CX,1         (* 1 Zeichen *)
  162.      MOV   AL,[BP-2]    (* ASCII '┌' *)
  163.      MOV   AH,9         (* Code-Nr 9 *)
  164.      INT   10h          (* Zeichen ausgeben *)
  165.  
  166.      (* obere horizontale Linie zeichnen *)
  167.      INC   DL           (* eine Spalte weiter *)
  168.      MOV   AH,2         (* Code-Nr 2 *)
  169.      INT   10h          (* Cursor auf x1 + 1, y1 *)
  170.      MOV   AX,WORD(x2)  (* AX = x2 *)
  171.      SUB   AX,WORD(x1)  (* AX = AX - x1 *)
  172.      DEC   AX           (* AX = AX - 1 *)
  173.      MOV   CX,AX        (* Anzahl der '─' Zeichen *)
  174.      MOV   AL,[BP-12]   (* ASCII '─' *)
  175.      MOV   AH,9         (* Code-Nr 9 *)
  176.      INT   10h          (* Zeichen ausgeben *)
  177.  
  178.      (* Stack aufräumen (Zeichensatz) *)
  179.      MOV   CX,6         (* sechs Zeichen *)
  180.   @del_st:
  181.      POP   AX
  182.      LOOP  @del_st      (* bis sechs Zeichen vom Stack *)
  183.   END;
  184. END;
  185.  
  186. BEGIN
  187.  ClrScr;
  188.  FOR i:=0 TO 3 DO BEGIN
  189.    Delay(400);
  190.    Frame1(i * 4, 40 + i * 4, i * 4, 10 + i * 4, 10, i);
  191.   END;
  192. END.
  193.