home *** CD-ROM | disk | FTP | other *** search
- (*--------------------------------------------------------*)
- (* FRAME.PAS *)
- (* VERSION NUR FÜR TURBO-PASCAL 6.0 *)
- (* Turbo-Pascal 3.0-Version siehe DOS-Extra 2, S. 24 - 26 *)
- (* Copyright 1988, 1991 J. Dirbach, J. Braun & DMV-Verlag *)
- (*--------------------------------------------------------*)
-
- PROGRAM Frame;
-
- USES Crt; (* Für ClrScr *)
-
- VAR
- i: BYTE;
-
- PROCEDURE Frame1(x1, x2, y1, y2, attr, typ: BYTE);
- BEGIN
- ASM
- (* Zeichensatz auf Stack initialisieren *)
- MOV AL, typ (* Zeichensatz in AX laden *)
- CMP AL,1 (* Zeichensatz 1 ? *)
- JNZ @zeich2 (* Zeichensatz <> 1 *)
- MOV AX,218 (* ┌ *)
- PUSH AX
- MOV AX,191 (* ┐ *)
- PUSH AX
- MOV AX,192 (* └ *)
- PUSH AX
- MOV AX,217 (* ┘ *)
- PUSH AX
- MOV AX,179 (* │ *)
- PUSH AX
- MOV AX,196 (* ─ *)
- PUSH AX
- JMP @z_end (* Zeichensatz 1 geladen *)
-
- @zeich2:
- CMP AL, 2 (* Zeichensatz 2 ? *)
- JNZ @zeich3 (* Zeichensatz <> 2 *)
- MOV AX,201 (* ╔ *)
- PUSH AX
- MOV AX,187 (* ╗ *)
- PUSH AX
- MOV AX,200 (* ╚ *)
- PUSH AX
- MOV AX,188 (* ╝ *)
- PUSH AX
- MOV AX,186 (* ║ *)
- PUSH AX
- MOV AX,205 (* ═ *)
- PUSH AX
- JMP @z_end (* Zeichensatz 2 geladen *)
-
- @zeich3:
- CMP AL,3 (* Zeichensatz 3 ? *)
- JNZ @zeich4 (* Zeichensatz <> 3 *)
- MOV AX,213 (* ╒ *)
- PUSH AX
- MOV AX,184 (* ╕ *)
- PUSH AX
- MOV AX,212 (* ╘ *)
- PUSH AX
- MOV AX,190 (* ╛ *)
- PUSH AX
- MOV AX,179 (* │ *)
- PUSH AX
- MOV AX,205 (* ═ *)
- PUSH AX
- JMP @z_end (* Zeichensatz 3 geladen *)
-
- @zeich4:
- MOV AX,214 (* ╓ *)
- PUSH AX
- MOV AX,183 (* ╖ *)
- PUSH AX
- MOV AX,211 (* ╙ *)
- PUSH AX
- MOV AX,189 (* ╜ *)
- PUSH AX
- MOV AX,186 (* ║ *)
- PUSH AX
- MOV AX,196 (* ─ *)
- PUSH AX (* Zeichensatz 4 geladen *)
-
- @z_end: (* Rahmen zeichnen *)
-
- (* linke untere Ecke zeichnen *)
- MOV DH, y2 (* Zeile y2 *)
- MOV DL, x1 (* Spalte x1 *)
- MOV BH, 0 (* Bildschirmseite BH # *)
- MOV AH, 2 (* Code-Nr 2 *)
- INT 10h (* Cursor auf x1, y2 *)
- MOV CX, 1 (* ein Zeichen *)
- MOV AL,[BP - 6] (* ASCII '└' *)
- MOV BL, attr (* Attribut # *)
- MOV AH, 9 (* Code-Nr 9 *)
- INT 10h (* Zeichen ausgeben *)
-
- (* untere horizontale Linie zeichnen *)
- INC DL (* eine Spalte weiter *)
- MOV AH, 2 (* Code-Nr 2 *)
- INT 10h (* Cursor auf x1 + 1, y2 *)
- MOV AX, WORD(x2) (* AX = x2 *)
- SUB AX, WORD(x1) (* AX = AX - x1 *)
- DEC AX (* AX = AX - 1 *)
- MOV CX, AX (* Anzahl der '─' Zeichen *)
- MOV AL, [BP -12] (* ASCII '─' *)
- MOV AH, 9 (* Code-Nr 9 *)
- INT 10h (* Zeichen ausgeben *)
-
- (* rechte untere Ecke zeichnen *)
- MOV DL, x2 (* Spalte x2 *)
- MOV AH,2 (* Code-Nr 2 *)
- INT 10h (* Cursor auf x2, y2 *)
- MOV CX,1 (* ein Zeichen *)
- MOV AL,[BP-8] (* ASCII '┘' *)
- MOV AH,9 (* Code-Nr 9 *)
- INT 10h (* Zeichen ausgeben *)
-
- (* rechte vertikale Linie zeichnen *)
- DEC DH (* eine Zeile höher *)
- MOV AH,2 (* Code-Nr 2 *)
- INT 10h (* Cursor auf x2, y2 - 1 *)
- MOV AL,[BP-10] (* ASCII '│' *)
- @LOOP1:
- MOV CX,1 (* ein Zeichen *)
- MOV AH,9 (* Code-Nr 9 *)
- INT 10h (* Zeichen ausgeben *)
- DEC DH (* eine Zeile höher *)
- MOV AH,2 (* Code-Nr 2 *)
- INT 10h (* Cursor auf x2, DH *)
- MOV AH, y1 (* vergleichswert y1 *)
- CMP AH,DH (* DH - AH *)
- JNZ @LOOP1 (* zf <> 0 : LOOP1 *)
-
- (* rechte obere Ecke zeichnen *)
- MOV CX,1 (* ein Zeichen *)
- MOV AL,[BP-4] (* ASCII '┐' *)
- MOV AH,9 (* Code-Nr 9 *)
- INT 10h (* Zeichen ausgeben *)
-
- (* linke vertikale Linie zeichnen *)
- MOV DH, y2 (* Zeile y2 *)
- DEC DH (* Zeile y2 - 1 *)
- MOV DL, x1 (* Spalte x1 *)
- MOV AH,2 (* Code-Nr 2 *)
- INT 10h (* Cursor auf x1, y2 - 1 *)
- MOV AL,[BP-10] (* ASCII '│' *)
-
- @LOOP2:
- MOV CX,1 (* 1 Zeichen *)
- MOV AH,9 (* Code-Nr 9 *)
- INT 10h (* Zeichen ausgeben *)
- DEC DH (* Zeilenregister - 1 *)
- MOV AH,2 (* Code-Nr 2 *)
- INT 10h (* Cursor auf x1, DH *)
- MOV AH,y1 (* Vergleichswert y1 *)
- CMP AH,DH (* DH - AH *)
- JNZ @LOOP2 (* zf <> 0 : LOOP2 *)
-
- (* linke obere Ecke zeichnen *)
- MOV CX,1 (* 1 Zeichen *)
- MOV AL,[BP-2] (* ASCII '┌' *)
- MOV AH,9 (* Code-Nr 9 *)
- INT 10h (* Zeichen ausgeben *)
-
- (* obere horizontale Linie zeichnen *)
- INC DL (* eine Spalte weiter *)
- MOV AH,2 (* Code-Nr 2 *)
- INT 10h (* Cursor auf x1 + 1, y1 *)
- MOV AX,WORD(x2) (* AX = x2 *)
- SUB AX,WORD(x1) (* AX = AX - x1 *)
- DEC AX (* AX = AX - 1 *)
- MOV CX,AX (* Anzahl der '─' Zeichen *)
- MOV AL,[BP-12] (* ASCII '─' *)
- MOV AH,9 (* Code-Nr 9 *)
- INT 10h (* Zeichen ausgeben *)
-
- (* Stack aufräumen (Zeichensatz) *)
- MOV CX,6 (* sechs Zeichen *)
- @del_st:
- POP AX
- LOOP @del_st (* bis sechs Zeichen vom Stack *)
- END;
- END;
-
- BEGIN
- ClrScr;
- FOR i:=0 TO 3 DO BEGIN
- Delay(400);
- Frame1(i * 4, 40 + i * 4, i * 4, 10 + i * 4, 10, i);
- END;
- END.
-