"--------------------------------------------------------------" "Rendering and reading arrays in PPM " " Zorislav Shoyat, 3/1/2020 16:36 " "--------------------------------------------------------------" 10 ENASCII @lf SET "Generates a Portable Pix Map file, based on colorspace." DYADIC " ppm" '.ppm', @file SET "generating a Portable Pix Map" DUP SHAPE 'P6' lf , file TEXTWRITE DISCARD "shape" lf , file TEXTAPPEND DISCARD '255' lf , file TEXTAPPEND DISCARD file colorspace ! ; OPERATOR @ppm SET DYADIC " rgbmap" SWAP DUP ABS ENLIST LARGEST / DECAPSULATE ENLIST 1 + 2 / 255 * INTEGER ENASCII SWAP TEXTAPPEND DISCARD; @rgbmap SET 0 #2PI 3 / DUP 2 * , , "(0 2pi/3 4pi/3)" #PI 2 / - #PI 3 / + #PI 12 / 5 * + ENCLOSE @phases SET DYADIC " cosmap" SWAP ABS DUP ENLIST LARGEST / #2PI * phases + ENLIST COS 1 + 2 / 255 * INTEGER ENASCII SWAP TEXTAPPEND DISCARD; @cosmap SET cosmap @colorspace SET DYADIC " bitmap" SWAP ABS DUP ENLIST LARGEST / 16777215 * ((65536 256 1)) / INTEGER 256 MODULO ENLIST ENASCII SWAP TEXTAPPEND DISCARD; @bitmap SET DYADIC " graymap" SWAP ABS DUP ENLIST LARGEST / 255 * ((1 1 1)) * INTEGER ENLIST ENASCII SWAP TEXTAPPEND DISCARD; @graymap SET DYADIC " redmap" SWAP ABS DUP ENLIST LARGEST / 255 * ((1 0 0)) * INTEGER ENLIST ENASCII SWAP TEXTAPPEND DISCARD; @redmap SET DYADIC " greenmap" SWAP ABS DUP ENLIST LARGEST / 255 * ((0 1 0)) * INTEGER ENLIST ENASCII SWAP TEXTAPPEND DISCARD; @greenmap SET DYADIC " bluemap" SWAP ABS DUP ENLIST LARGEST / 255 * ((0 0 1)) * INTEGER ENLIST ENASCII SWAP TEXTAPPEND DISCARD; @bluemap SET .