Skip to content

Instantly share code, notes, and snippets.

@possan
Created August 19, 2015 22:25
Show Gist options
  • Save possan/2afe5c38faf3d11d35a9 to your computer and use it in GitHub Desktop.
Save possan/2afe5c38faf3d11d35a9 to your computer and use it in GitHub Desktop.
VT100 Rotozoomer in Cobol
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.
@possan
Copy link
Author

possan commented Aug 19, 2015

Compile and run with

cobc --free -x -o rotozoom rotozoom.cob
./rotozoom

@onemanbucket
Copy link

perfect, just what I was looking for!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment