1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009 |
- //
- // Copyright 2020 Electronic Arts Inc.
- //
- // TiberianDawn.DLL and RedAlert.dll and corresponding source code is free
- // software: you can redistribute it and/or modify it under the terms of
- // the GNU General Public License as published by the Free Software Foundation,
- // either version 3 of the License, or (at your option) any later version.
- // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
- // in the hope that it will be useful, but with permitted additional restrictions
- // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
- // distributed with this program. You should have received a copy of the
- // GNU General Public License along with permitted additional restrictions
- // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
- /* $Header: F:\projects\c&c\vcs\code\comqueue.cpv 1.10 16 Oct 1995 16:49:14 JOE_BOSTIC $ */
- /***************************************************************************
- ** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S **
- ***************************************************************************
- * *
- * Project Name : Command & Conquer *
- * *
- * File Name : COMQUEUE.CPP *
- * *
- * Programmer : Bill Randolph *
- * *
- * Start Date : December 19, 1994 *
- * *
- * Last Update : May 31, 1995 [BRR] *
- * *
- *-------------------------------------------------------------------------*
- * Functions: *
- * CommQueueClass::CommQueueClass -- class constructor *
- * CommQueueClass::~CommQueueClass -- class destructor *
- * CommQueueClass::Init -- initializes this queue *
- * CommQueueClass::Queue_Send -- queues a message for sending *
- * CommQueueClass::UnQueue_Send -- removes next entry from send queue *
- * CommQueueClass::Next_Send -- gets ptr to next entry in send queue *
- * CommQueueClass::Get_Send -- gets ptr to queue entry *
- * CommQueueClass::Queue_Receive -- queues a received message *
- * CommQueueClass::UnQueue_Receive -- removes next entry from send queue *
- * CommQueueClass::Next_Receive -- gets ptr to next entry in send queue *
- * CommQueueClass::Get_Receive -- gets ptr to queue entry *
- * CommQueueClass::Add_Delay -- adds a new delay value for response time *
- * CommQueueClass::Avg_Response_Time -- returns average response time *
- * CommQueueClass::Max_Response_Time -- returns max response time *
- * CommQueueClass::Reset_Response_Time -- resets computations *
- * CommQueueClass::Configure_Debug -- sets up special debug values *
- * CommQueueClass::Mono_Debug_Print -- Debug output routine *
- * CommQueueClass::Mono_Debug_Print2 -- Debug output; alternate format *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #if (0)
- #include "function.h"
- #ifndef DEMO
- /***************************************************************************
- * CommQueueClass::CommQueueClass -- class constructor *
- * *
- * INPUT: *
- * numsend # queue entries for sending *
- * numreceive # queue entries for receiving *
- * maxlen maximum desired packet length, in bytes *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/19/1994 BR : Created. *
- *=========================================================================*/
- CommQueueClass::CommQueueClass(int numsend, int numreceive, int maxlen)
- {
- int i;
- /*
- ----------------------------- Init variables -----------------------------
- */
- MaxSend = numsend;
- MaxReceive = numreceive;
- MaxPacketSize = maxlen;
- /*
- ----------------------- Allocate the queue entries -----------------------
- */
- SendQueue = new SendQueueType[numsend];
- ReceiveQueue = new ReceiveQueueType[numreceive];
- /*
- ---------------------- Allocate queue entry buffers ----------------------
- */
- for (i = 0; i < MaxSend; i++) {
- SendQueue[i].Buffer = new char[maxlen];
- }
- for (i = 0; i < MaxReceive; i++) {
- ReceiveQueue[i].Buffer = new char[maxlen];
- }
- Init();
- } /* end of CommQueueClass */
- /***************************************************************************
- * CommQueueClass::~CommQueueClass -- class destructor *
- * *
- * INPUT: *
- * none. *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/19/1994 BR : Created. *
- *=========================================================================*/
- CommQueueClass::~CommQueueClass()
- {
- int i;
- /*
- ------------------------ Free queue entry buffers ------------------------
- */
- for (i = 0; i < MaxSend; i++) {
- delete [] SendQueue[i].Buffer;
- }
- for (i = 0; i < MaxReceive; i++) {
- delete [] ReceiveQueue[i].Buffer;
- }
- delete [] SendQueue;
- delete [] ReceiveQueue;
- } /* end of ~CommQueueClass */
- /***************************************************************************
- * CommQueueClass::Init -- initializes this queue *
- * *
- * INPUT: *
- * none. *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 01/20/1995 BR : Created. *
- *=========================================================================*/
- void CommQueueClass::Init(void)
- {
- int i;
- /*------------------------------------------------------------------------
- Init data members
- ------------------------------------------------------------------------*/
- SendTotal = 0L;
- ReceiveTotal = 0L;
- DelaySum = 0L;
- NumDelay = 0L;
- MeanDelay = 0L;
- MaxDelay = 0L;
- SendCount = 0;
- SendNext = 0;
- SendEmpty = 0;
- ReceiveCount = 0;
- ReceiveNext = 0;
- ReceiveEmpty = 0;
- /*------------------------------------------------------------------------
- Init the queue entries
- ------------------------------------------------------------------------*/
- for (i = 0; i < MaxSend; i++) {
- SendQueue[i].IsActive = 0;
- SendQueue[i].IsACK = 0;
- SendQueue[i].FirstTime = 0L;
- SendQueue[i].LastTime = 0L;
- SendQueue[i].SendCount = 0L;
- ReceiveQueue[i].BufLen = 0;
- }
- for (i = 0; i < MaxReceive; i++) {
- ReceiveQueue[i].IsActive = 0;
- ReceiveQueue[i].IsRead = 0;
- ReceiveQueue[i].IsACK = 0;
- ReceiveQueue[i].BufLen = 0;
- }
- /*------------------------------------------------------------------------
- Init debug values
- ------------------------------------------------------------------------*/
- DebugOffset = 0;
- DebugSize = 0;
- DebugNames = NULL;
- DebugMaxNames = 0;
- } /* end of Init */
- /***************************************************************************
- * CommQueueClass::Queue_Send -- queues a message for sending *
- * *
- * INPUT: *
- * buf buffer containing the message *
- * buflen length of 'buf' *
- * *
- * OUTPUT: *
- * 1 = OK, 0 = no room in the queue *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/20/1994 BR : Created. *
- *=========================================================================*/
- int CommQueueClass::Queue_Send(void *buf, int buflen)
- {
- /*
- --------------------- Error if no room in the queue ----------------------
- */
- if (SendCount==MaxSend || SendQueue[SendEmpty].IsActive!=0)
- return(0);
- /*
- ---------------------------- Set entry flags -----------------------------
- */
- SendQueue[SendEmpty].IsActive = 1; // entry is now active
- SendQueue[SendEmpty].IsACK = 0; // entry hasn't been ACK'd
- SendQueue[SendEmpty].FirstTime = 0L; // filled in by Manager when sent
- SendQueue[SendEmpty].LastTime = 0L; // filled in by Manager when sent
- SendQueue[SendEmpty].SendCount = 0L; // filled in by Manager when sent
- SendQueue[SendEmpty].BufLen = buflen; // save buffer size
- /*
- ------------------------- Copy the packet data ---------------------------
- */
- memcpy(SendQueue[SendEmpty].Buffer,buf,buflen);
- /*
- -------------------- Increment counters & entry ptr ----------------------
- */
- SendCount++;
- SendEmpty++;
- if (SendEmpty==MaxSend)
- SendEmpty = 0;
- SendTotal++;
- return(1);
- } /* end of Queue_Send */
- /***************************************************************************
- * CommQueueClass::UnQueue_Send -- removes next entry from send queue *
- * *
- * INPUT: *
- * buf buffer to store entry's data in; if NULL, it's discarded *
- * buflen filled in with length of entry retrieved *
- * *
- * OUTPUT: *
- * 1 = OK, 0 = no entry to retreive *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/20/1994 BR : Created. *
- *=========================================================================*/
- int CommQueueClass::UnQueue_Send(void *buf, int *buflen)
- {
- /*
- --------------------- Error if no entry to retrieve ----------------------
- */
- if (SendCount==0 || SendQueue[SendNext].IsActive==0)
- return(0);
- /*
- ---------------------- Copy the data from the entry ----------------------
- */
- if (buf!=NULL) {
- memcpy(buf,SendQueue[SendNext].Buffer,SendQueue[SendNext].BufLen);
- (*buflen) = SendQueue[SendNext].BufLen;
- }
- /*
- ---------------------------- Set entry flags -----------------------------
- */
- SendQueue[SendNext].IsActive = 0;
- SendQueue[SendNext].IsACK = 0;
- SendQueue[SendNext].FirstTime = 0L;
- SendQueue[SendNext].LastTime = 0L;
- SendQueue[SendNext].SendCount = 0L;
- SendQueue[SendNext].BufLen = 0;
- SendCount--;
- SendNext++;
- if (SendNext==MaxSend)
- SendNext = 0;
- return(1);
- } /* end of UnQueue_Send */
- /***************************************************************************
- * CommQueueClass::Next_Send -- gets ptr to next entry in send queue *
- * *
- * INPUT: *
- * none. *
- * *
- * OUTPUT: *
- * ptr to entry, NULL if there is none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/20/1994 BR : Created. *
- *=========================================================================*/
- SendQueueType * CommQueueClass::Next_Send(void)
- {
- if (SendCount==0) {
- return(NULL);
- } else {
- return(&SendQueue[SendNext]);
- }
- }
- /***************************************************************************
- * CommQueueClass::Get_Send -- gets ptr to queue entry *
- * *
- * This routine gets a pointer to the indicated queue entry. The index *
- * value is relative to the next-accessable queue entry; 0 = get the *
- * next available queue entry, 1 = get the one behind that, etc. *
- * *
- * INPUT: *
- * index index of entry to get (0 = 1st available) *
- * *
- * OUTPUT: *
- * ptr to entry *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/21/1994 BR : Created. *
- *=========================================================================*/
- SendQueueType * CommQueueClass::Get_Send(int index)
- {
- int i;
- i = SendNext + index;
- if (i >= MaxSend)
- i -= MaxSend;
- if (SendQueue[i].IsActive==0) {
- return(NULL);
- } else {
- return(&SendQueue[i]);
- }
- }
- /***************************************************************************
- * CommQueueClass::Queue_Receive -- queues a received message *
- * *
- * INPUT: *
- * buf buffer containing the message *
- * buflen length of 'buf' *
- * *
- * OUTPUT: *
- * 1 = OK, 0 = no room in the queue *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/20/1994 BR : Created. *
- *=========================================================================*/
- int CommQueueClass::Queue_Receive(void *buf, int buflen)
- {
- /*
- --------------------- Error if no room in the queue ----------------------
- */
- if (ReceiveCount==MaxReceive || ReceiveQueue[ReceiveEmpty].IsActive!=0) {
- return(0);
- }
- /*
- ---------------------------- Set entry flags -----------------------------
- */
- ReceiveQueue[ReceiveEmpty].IsActive = 1;
- ReceiveQueue[ReceiveEmpty].IsRead = 0;
- ReceiveQueue[ReceiveEmpty].IsACK = 0;
- ReceiveQueue[ReceiveEmpty].BufLen = buflen;
- /*
- ------------------------- Copy the packet data ---------------------------
- */
- if (buflen > MaxPacketLen){
- CCDebugString ("C&C95 - Error. Incoming packet too large");
- }
- memcpy(ReceiveQueue[ReceiveEmpty].Buffer,buf,buflen);
- /*
- -------------------- Increment counters & entry ptr ----------------------
- */
- ReceiveCount++;
- ReceiveEmpty++;
- if (ReceiveEmpty==MaxReceive)
- ReceiveEmpty = 0;
- ReceiveTotal++;
- return(1);
- } /* end of Queue_Receive */
- /***************************************************************************
- * CommQueueClass::UnQueue_Receive -- removes next entry from send queue *
- * *
- * INPUT: *
- * buf buffer to store entry's data in; if NULL, it's discarded *
- * buflen filled in with length of entry retrieved *
- * *
- * OUTPUT: *
- * 1 = OK, 0 = no entry to retreive *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/20/1994 BR : Created. *
- *=========================================================================*/
- int CommQueueClass::UnQueue_Receive(void *buf, int *buflen)
- {
- /*
- --------------------- Error if no entry to retrieve ----------------------
- */
- if (ReceiveCount==0 || ReceiveQueue[ReceiveNext].IsActive==0) {
- return(0);
- }
- /*
- ---------------------- Copy the data from the entry ----------------------
- */
- if (buf!=NULL) {
- memcpy(buf,ReceiveQueue[ReceiveNext].Buffer,
- ReceiveQueue[ReceiveNext].BufLen);
- (*buflen) = ReceiveQueue[ReceiveNext].BufLen;
- }
- /*
- ---------------------------- Set entry flags -----------------------------
- */
- ReceiveQueue[ReceiveNext].IsActive = 0;
- ReceiveQueue[ReceiveNext].IsRead = 0;
- ReceiveQueue[ReceiveNext].IsACK = 0;
- ReceiveQueue[ReceiveNext].BufLen = 0;
- ReceiveCount--;
- ReceiveNext++;
- if (ReceiveNext==MaxReceive)
- ReceiveNext = 0;
- return(1);
- } /* end of UnQueue_Receive */
- /***************************************************************************
- * CommQueueClass::Next_Receive -- gets ptr to next entry in send queue *
- * *
- * INPUT: *
- * none. *
- * *
- * OUTPUT: *
- * ptr to entry, NULL if there is none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/20/1994 BR : Created. *
- *=========================================================================*/
- ReceiveQueueType * CommQueueClass::Next_Receive(void)
- {
- if (ReceiveCount==0) {
- return(NULL);
- } else {
- return(&ReceiveQueue[ReceiveNext]);
- }
- }
- /***************************************************************************
- * CommQueueClass::Get_Receive -- gets ptr to queue entry *
- * *
- * This routine gets a pointer to the indicated queue entry. The index *
- * value is relative to the next-accessable queue entry; 0 = get the *
- * next available queue entry, 1 = get the one behind that, etc. *
- * *
- * INPUT: *
- * index index of entry to get (0 = 1st available) *
- * *
- * OUTPUT: *
- * ptr to entry *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/21/1994 BR : Created. *
- *=========================================================================*/
- ReceiveQueueType * CommQueueClass::Get_Receive(int index)
- {
- int i;
- i = ReceiveNext + index;
- if (i >= MaxReceive)
- i -= MaxReceive;
- if (ReceiveQueue[i].IsActive==0) {
- return(NULL);
- } else {
- return(&ReceiveQueue[i]);
- }
- }
- /***************************************************************************
- * CommQueueClass::Add_Delay -- adds a new delay value for response time *
- * *
- * This routine updates the average response time for this queue. The *
- * computation is based on the average of the last 'n' delay values given, *
- * It computes a running total of the last n delay values, then divides *
- * that by n to compute the average. *
- * *
- * When the number of values given exceeds the max, the mean is subtracted *
- * off the total, then the new value is added in. Thus, any single delay *
- * value will have an effect on the total that approaches 0 over time, and *
- * the new delay value contributes to 1/n of the mean. *
- * *
- * INPUT: *
- * delay value to add into the response time computation *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 01/19/1995 BR : Created. *
- *=========================================================================*/
- void CommQueueClass::Add_Delay(unsigned long delay)
- {
- int roundoff = 0;
- if (NumDelay==256) {
- DelaySum -= MeanDelay;
- DelaySum += delay;
- if ( (DelaySum & 0x00ff) > 127)
- roundoff = 1;
- MeanDelay = (DelaySum >> 8) + roundoff;
- } else {
- NumDelay++;
- DelaySum += delay;
- MeanDelay = DelaySum / NumDelay;
- }
- if (delay > MaxDelay) {
- MaxDelay = delay;
- }
- } /* end of Add_Delay */
- /***************************************************************************
- * CommQueueClass::Avg_Response_Time -- returns average response time *
- * *
- * INPUT: *
- * none. *
- * *
- * OUTPUT: *
- * latest computed average response time *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 01/19/1995 BR : Created. *
- *=========================================================================*/
- unsigned long CommQueueClass::Avg_Response_Time(void)
- {
- return(MeanDelay);
- } /* end of Avg_Response_Time */
- /***************************************************************************
- * CommQueueClass::Max_Response_Time -- returns max response time *
- * *
- * INPUT: *
- * none. *
- * *
- * OUTPUT: *
- * latest computed average response time *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 01/19/1995 BR : Created. *
- *=========================================================================*/
- unsigned long CommQueueClass::Max_Response_Time(void)
- {
- return(MaxDelay);
- } /* end of Max_Response_Time */
- /***************************************************************************
- * CommQueueClass::Reset_Response_Time -- resets computations *
- * *
- * INPUT: *
- * none. *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 01/19/1995 BR : Created. *
- *=========================================================================*/
- void CommQueueClass::Reset_Response_Time(void)
- {
- DelaySum = 0L;
- NumDelay = 0L;
- MeanDelay = 0L;
- MaxDelay = 0L;
- } /* end of Reset_Response_Time */
- /***************************************************************************
- * CommQueueClass::Configure_Debug -- sets up special debug values *
- * *
- * Mono_Debug_Print2() can look into a packet to pull out a particular *
- * ID, and can print both that ID and a string corresponding to *
- * that ID. This routine configures these values so it can find *
- * and decode the ID. This ID is used in addition to the normal *
- * CommHeaderType values. *
- * *
- * INPUT: *
- * offset ID's byte offset into packet *
- * size size of ID, in bytes; 0 if none *
- * names ptr to array of names; use ID as an index into this *
- * maxnames max # in the names array; 0 if none. *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * Names shouldn't be longer than 12 characters. *
- * *
- * HISTORY: *
- * 05/31/1995 BRR : Created. *
- *=========================================================================*/
- void CommQueueClass::Configure_Debug(int offset, int size, char **names,
- int maxnames)
- {
- DebugOffset = offset;
- DebugSize = size;
- DebugNames = names;
- DebugMaxNames = maxnames;
- } /* end of Configure_Debug */
- /***************************************************************************
- * Mono_Debug_Print -- Debug output routine *
- * *
- * This routine leaves 5 lines at the top for the caller's use. *
- * *
- * INPUT: *
- * refresh 1 = clear screen & completely refresh *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 05/02/1995 BRR : Created. *
- *=========================================================================*/
- void CommQueueClass::Mono_Debug_Print(int refresh)
- {
- #ifdef WWLIB32_H
- int i; // loop counter
- static int send_col[] = {1,14,28}; // coords of send queue columns
- static int receive_col[] = {40,54,68}; // coords of recv queue columns
- int row,col; // current row,col for printing
- int num; // max # items to print
- struct CommHdr { // this mirrors the CommHeaderType
- unsigned short MagicNumber;
- unsigned char Code;
- unsigned long PacketID;
- } *hdr;
- /*------------------------------------------------------------------------
- If few enough entries, call the verbose debug version
- ------------------------------------------------------------------------*/
- if (MaxSend <= 16) {
- Mono_Debug_Print2(refresh);
- return;
- }
- /*------------------------------------------------------------------------
- Refresh the screen
- ------------------------------------------------------------------------*/
- if (refresh) {
- Mono_Clear_Screen ();
- Mono_Printf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n");
- Mono_Printf("³ ³\n");
- Mono_Printf("³ ³\n");
- Mono_Printf("³ ³\n");
- Mono_Printf("ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\n");
- Mono_Printf("³ Send Queue ³ Receive Queue ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ID Ct ACK ID Ct ACK ID Ct ACK³ ID Rd ACK ID Rd ACK ID Rd ACK³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ");
- }
- /*------------------------------------------------------------------------
- Print Send Queue items
- ------------------------------------------------------------------------*/
- if (MaxSend <= 48) {
- num = MaxSend;
- } else {
- num = 48;
- }
- col = 0;
- row = 0;
- for (i = 0; i < MaxSend; i++) {
- Mono_Set_Cursor (send_col[col],row + 8);
- if (SendQueue[i].IsActive) {
- hdr = (CommHdr *)SendQueue[i].Buffer;
- hdr->MagicNumber = hdr->MagicNumber;
- hdr->Code = hdr->Code;
- Mono_Printf ("%4d %2d %d",hdr->PacketID, SendQueue[i].SendCount,
- SendQueue[i].IsACK);
- } else {
- Mono_Printf ("____ __ _ ");
- }
- row++;
- if (row > 15) {
- row = 0;
- col++;
- }
- }
- /*------------------------------------------------------------------------
- Print Receive Queue items
- ------------------------------------------------------------------------*/
- if (MaxReceive <= 48) {
- num = MaxSend;
- } else {
- num = 48;
- }
- col = 0;
- row = 0;
- for (i = 0; i < MaxReceive; i++) {
- Mono_Set_Cursor (receive_col[col],row + 8);
- if (ReceiveQueue[i].IsActive) {
- hdr = (CommHdr *)ReceiveQueue[i].Buffer;
- Mono_Printf ("%4d %d %d",hdr->PacketID, ReceiveQueue[i].IsRead,
- ReceiveQueue[i].IsACK);
- } else {
- Mono_Printf ("____ _ _ ");
- }
- row++;
- if (row > 15) {
- row = 0;
- col++;
- }
- }
- #else
- refresh = refresh;
- #endif
- } /* end of Mono_Debug_Print */
- /***************************************************************************
- * CommQueueClass::Mono_Debug_Print2 -- Debug output; alternate format *
- * *
- * This routine prints more information than the other version; it's *
- * called only if the number of queue entries is small enough to support *
- * this format. *
- * *
- * INPUT: *
- * refresh 1 = clear screen & completely refresh *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 05/31/1995 BRR : Created. *
- *=========================================================================*/
- void CommQueueClass::Mono_Debug_Print2(int refresh)
- {
- #ifdef WWLIB32_H
- int i; // loop counter
- char txt[80];
- int val;
- struct CommHdr { // this mirrors the CommHeaderType
- unsigned short MagicNumber;
- unsigned char Code;
- unsigned long PacketID;
- } *hdr;
- /*------------------------------------------------------------------------
- Refresh the screen
- ------------------------------------------------------------------------*/
- if (refresh) {
- Mono_Clear_Screen ();
- Mono_Printf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n");
- Mono_Printf("³ ³\n");
- Mono_Printf("³ ³\n");
- Mono_Printf("³ ³\n");
- Mono_Printf("ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\n");
- Mono_Printf("³ Send Queue ³ Receive Queue ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ID Ct Type Data Name ACK ³ ID Rd Type Data Name ACK ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("³ ³ ³\n");
- Mono_Printf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ");
- }
- /*------------------------------------------------------------------------
- Print Send Queue items
- ------------------------------------------------------------------------*/
- for (i = 0; i < MaxSend; i++) {
- Mono_Set_Cursor (1,8 + i);
- /*.....................................................................
- Print an active entry
- .....................................................................*/
- if (SendQueue[i].IsActive) {
- /*..................................................................
- Get header info
- ..................................................................*/
- hdr = (CommHdr *)SendQueue[i].Buffer;
- hdr->MagicNumber = hdr->MagicNumber;
- hdr->Code = hdr->Code;
- sprintf(txt,"%4d %2d %-5s ",
- hdr->PacketID,
- SendQueue[i].SendCount,
- ConnectionClass::Command_Name(hdr->Code));
- /*..................................................................
- Decode app's ID & its name
- ..................................................................*/
- if (DebugSize && (DebugOffset + DebugSize) <= SendQueue[i].BufLen) {
- if (DebugSize==1) {
- val = *(SendQueue[i].Buffer + DebugOffset);
- } else {
- if (DebugSize==2) {
- val = *((short *)(SendQueue[i].Buffer + DebugOffset));
- } else {
- if (DebugSize==4) {
- val = *((int *)(SendQueue[i].Buffer + DebugOffset));
- }
- }
- }
- sprintf(txt + strlen(txt),"%4d ",val);
- if (DebugMaxNames && val > 0 && val < DebugMaxNames) {
- sprintf(txt + strlen(txt),"%-12s %x",
- DebugNames[val],
- SendQueue[i].IsACK);
- } else {
- sprintf(txt + strlen(txt)," %x",SendQueue[i].IsACK);
- }
- }
- } else {
- /*.....................................................................
- Entry isn't active; print blanks
- .....................................................................*/
- Mono_Printf("____ __ _");
- }
- }
- /*------------------------------------------------------------------------
- Print Receive Queue items
- ------------------------------------------------------------------------*/
- for (i = 0; i < MaxReceive; i++) {
- Mono_Set_Cursor (40,8 + i);
- /*.....................................................................
- Print an active entry
- .....................................................................*/
- if (ReceiveQueue[i].IsActive) {
- /*..................................................................
- Get header info
- ..................................................................*/
- hdr = (CommHdr *)ReceiveQueue[i].Buffer;
- hdr->MagicNumber = hdr->MagicNumber;
- hdr->Code = hdr->Code;
- sprintf(txt,"%4d %2d %-5s ",
- hdr->PacketID,
- ReceiveQueue[i].IsRead,
- ConnectionClass::Command_Name(hdr->Code));
- /*..................................................................
- Decode app's ID & its name
- ..................................................................*/
- if (DebugSize && (DebugOffset + DebugSize) <= SendQueue[i].BufLen) {
- if (DebugSize==1) {
- val = *(ReceiveQueue[i].Buffer + DebugOffset);
- } else {
- if (DebugSize==2) {
- val = *((short *)(ReceiveQueue[i].Buffer + DebugOffset));
- } else {
- if (DebugSize==4) {
- val = *((int *)(ReceiveQueue[i].Buffer + DebugOffset));
- }
- }
- }
- sprintf(txt + strlen(txt),"%4d ",val);
- if (DebugMaxNames && val > 0 && val < DebugMaxNames) {
- sprintf(txt + strlen(txt),"%-12s %x", DebugNames[val], ReceiveQueue[i].IsACK);
- } else {
- sprintf(txt + strlen(txt)," %x",ReceiveQueue[i].IsACK);
- }
- }
- } else {
- /*.....................................................................
- Entry isn't active; print blanks
- .....................................................................*/
- Mono_Printf("____ __ _");
- }
- }
- #else
- refresh = refresh;
- #endif
- } /* end of Mono_Debug_Print2 */
- #endif
- #endif
|