/* * Copyright(c) 2018, Space Science and Engineering Center, UW-Madison * Refer to "McIDAS Software Acquisition and Distribution Policies" * in the file mcidas/data/license.txt */ /**** $Id: m0frmtyp.c,v 1.7 2019/11/14 17:22:51 davep Exp $ ****/ #include "mcidas.h" #include "m0glue.h" int M0FrameType(int frame, int type) { const Fint *frame_base; M0frameflags *frame_flags; unsigned char *m0gbuc; int zero; /* <0 indicates request for type */ if (type < 0) { frame_base = FRAME_BASE(frame); frame_flags = FRAME_FLAGS(frame_base); return frame_flags->frame_type; } /* Force to a known type */ if (type != 1 && type != 2) { type = 0; } zero = 0; frame_base = FRAME_BASE(frame); frame_flags = FRAME_FLAGS(frame_base); if (type != 2 && frame_flags->gb_shm_key > 0) { m0gbuc = shmget(frame_flags->gb_shm_key, 0, 0); shmdt(m0gbuc); M0shmctl(frame_flags->gb_shm_key); Mcwrite("RGBFRMS.KEY",sizeof(int)*(frame-1),sizeof(int),&zero); } frame_flags->frame_type = type; frame_flags->r_frame = 0; frame_flags->g_frame = 0; frame_flags->b_frame = 0; frame_flags->gb_shm_key = 0; return type; } void frametype_(Fint *frame, Fint *type) { if ((int)*type < 0) { *type = (Fint *)M0FrameType((int)*frame, -1); return; } return (void )M0FrameType((int )*frame, (int )*type); } void M0RGBCleanSharedMemory() { int i, f; f = Mcluc(UC_NUMBER_OF_FRAMES); for (i=1; i<=f; i++) { M0FrameType(i, 0); } }