From 218ca90543758a20ac326e444ca0643174ca7384 Mon Sep 17 00:00:00 2001 From: Rebellion Developments Date: Thu, 16 Mar 2000 11:25:00 +0100 Subject: Import Aliens vs Predator - Gold (Build 116) Source code release, imported from: https://www.gamefront.com/games/aliens-vs-predator-3/file/avp-gold-complete-source-code All text files were converted to Unix format. --- 3dc/win95/TXIOCTRL.CPP | 110 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 3dc/win95/TXIOCTRL.CPP (limited to '3dc/win95/TXIOCTRL.CPP') diff --git a/3dc/win95/TXIOCTRL.CPP b/3dc/win95/TXIOCTRL.CPP new file mode 100644 index 0000000..53aded5 --- /dev/null +++ b/3dc/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