Created
August 19, 2015 22:25
-
-
Save possan/2afe5c38faf3d11d35a9 to your computer and use it in GitHub Desktop.
VT100 Rotozoomer in Cobol
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
IDENTIFICATION DIVISION. | |
PROGRAM-ID. ROTOZOOM. | |
DATA DIVISION. | |
WORKING-STORAGE SECTION. | |
01 DUMMY PIC 9(1) BINARY VALUE 0. | |
01 FRAME PIC 9(10) VALUE 0. | |
01 WS-CNT PIC 9(3) VALUE 0. | |
01 WS-CNT2 PIC 9(3) VALUE 0. | |
01 TMP PIC 9(3) VALUE 0. | |
01 TMP2 PIC 9(1) BINARY VALUE 0. | |
01 TMP3 PIC 9(1) BINARY VALUE 0. | |
01 TMP4 PIC 9(1) BINARY VALUE 0. | |
01 ZOOM PIC 9(3)v9(7) VALUE 0. | |
01 DX PIC s9(3)v9(7) VALUE 0. | |
01 DY PIC s9(3)v9(7) VALUE 0. | |
01 ROT PIC s9(5)v9(7) VALUE 0. | |
01 OX PIC s9(5)v9(7) VALUE 0. | |
01 OY PIC s9(5)v9(7) VALUE 0. | |
01 STARTX PIC s9(5)v9(7) VALUE 0. | |
01 STARTY PIC s9(5)v9(7) VALUE 0. | |
01 CURX PIC s9(5)v9(7) VALUE 0. | |
01 CURY PIC s9(5)v9(7) VALUE 0. | |
PROCEDURE DIVISION. | |
INIT. | |
SET FRAME TO 0. | |
DISPLAY x"1b" "[2J" WITH NO ADVANCING. | |
PERFORM WITH TEST AFTER UNTIL DUMMY > 0 | |
PERFORM RENDERFRAME | |
END-PERFORM. | |
RENDERFRAME. | |
DISPLAY x"1b" "[99A" x"1b" "[99D" WITH NO ADVANCING. | |
COMPUTE OX = FUNCTION SIN (FRAME / 190) * 20.0 + 1.5 | |
COMPUTE OY = FUNCTION SIN (FRAME / 180) * 10.0 + 1.6 | |
COMPUTE ZOOM = FUNCTION SIN (FRAME / 30) + 2.0 | |
COMPUTE ROT = FRAME / 19 | |
COMPUTE DX = FUNCTION COS (ROT / 10) * ZOOM | |
COMPUTE DY = FUNCTION SIN (ROT / 10) * ZOOM | |
SET WS-CNT TO 0. | |
SET STARTX TO 0. | |
SET STARTY TO 0. | |
PERFORM RENDERROW WITH TEST AFTER UNTIL WS-CNT>=30. | |
*> DISPLAY x"0a" WITH NO ADVANCING. | |
*> DISPLAY FRAME | |
*> DISPLAY ZOOM | |
ADD 1 TO FRAME. | |
RENDERROW. | |
SET WS-CNT2 TO 0. | |
SET CURX TO STARTX. | |
SET CURY TO STARTY. | |
PERFORM RENDERCOLUMN WITH TEST AFTER UNTIL WS-CNT2>=60. | |
DISPLAY x"0a" WITH NO ADVANCING. | |
ADD DY TO STARTX. | |
SUBTRACT DX FROM STARTY. | |
ADD 1 TO WS-CNT. | |
RENDERCOLUMN. | |
COMPUTE TMP2 = FUNCTION MOD (CURX / 20 + OX, 2) | |
COMPUTE TMP3 = FUNCTION MOD (CURY / 20 + OY, 2) | |
COMPUTE TMP4 = TMP2 + TMP3 | |
IF TMP4 > 1 THEN | |
SET TMP4 TO 0 | |
END-IF. | |
IF TMP4 > 0 THEN | |
DISPLAY x"1b" '[33m#' WITH NO ADVANCING | |
ELSE | |
DISPLAY x"1b" '[0m-' WITH NO ADVANCING | |
END-IF. | |
ADD DX TO CURX. | |
ADD DY TO CURY. | |
ADD 1 TO WS-CNT2. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
perfect, just what I was looking for!