From 2186d5f3f95cd74a070a490d899291648d58667a Mon Sep 17 00:00:00 2001 From: Steven Fuller Date: Sun, 1 Jul 2001 00:55:22 +0000 Subject: Initial revision --- src/win95/txioctrl.cpp | 110 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/win95/txioctrl.cpp (limited to 'src/win95/txioctrl.cpp') diff --git a/src/win95/txioctrl.cpp b/src/win95/txioctrl.cpp new file mode 100644 index 0000000..53aded5 --- /dev/null +++ b/src/win95/txioctrl.cpp @@ -0,0 +1,110 @@ +#include "txioctrl.h" + +#ifdef MaxImageGroups + +#include "list_tem.hpp" + +struct ImageNumber +{ + int group; + int offset; + + ImageNumber(){} + ImageNumber(int g,int o) : group(g), offset(o) {} + + inline int operator == (ImageNumber const & in2) const + { return group==in2.group && offset==in2.offset; } + inline int operator != (ImageNumber const & in2) const + { return ! operator == (in2); } +}; + +static List imgs_used_by_group[MaxImageGroups]; + +static List * grps_used_by_image[MaxImageGroups][MaxImages]; + +void MarkImageInUseByGroup(int img_group, int img_num_offset, int group_using) +{ + if (imgs_used_by_group[group_using].contains(ImageNumber(img_group,img_num_offset))) return; + + imgs_used_by_group[group_using].add_entry(ImageNumber(img_group,img_num_offset)); + + List * & grps_used_by_imageR = grps_used_by_image[img_group][img_num_offset]; + + if (!grps_used_by_imageR) + grps_used_by_imageR = new List(img_group); // includes itself + + if (!grps_used_by_imageR->contains(group_using)) + grps_used_by_imageR->add_entry(group_using); +} + +int IsImageInUse(int img_group, int img_num_offset) +{ + if (grps_used_by_image[img_group][img_num_offset]) + return 1; + else + return 0; +} + +int CanDeleteImage(int img_group, int img_num_offset) +{ + if (grps_used_by_image[img_group][img_num_offset]) + { + if (grps_used_by_image[img_group][img_num_offset]->contains(img_group)) + { + grps_used_by_image[img_group][img_num_offset]->delete_entry(img_group); // remove itself + if (!grps_used_by_image[img_group][img_num_offset]->size()) + { + delete grps_used_by_image[img_group][img_num_offset]; + grps_used_by_image[img_group][img_num_offset] = 0; + return 1; + } + else + return 0; + } + else + return 0; + } + else + return 1; +} + +void ImageGroupFreed(int img_group) +{ + while (imgs_used_by_group[img_group].size()) + { + ImageNumber used = imgs_used_by_group[img_group].first_entry(); + + List * & grps_used_by_imageR = grps_used_by_image[used.group][used.offset]; + + grps_used_by_imageR->delete_entry(img_group); + + if (!grps_used_by_imageR->size()) + { + NowDeleteImage(used.group,used.offset); + delete grps_used_by_imageR; + grps_used_by_imageR = 0; + } + + imgs_used_by_group[img_group].delete_first_entry(); + } +} + +void EnumSharedImages(int group_num, int numimages, ImageNumberCallbackFunction callback_fn, void * user) +{ + for (int i=0; i