-- File: StatsStrings.mesa,  Last Edit: HGM  January 6, 1981  10:39 PM

  String USING [EquivalentString],
  StatsDefs USING [StatCounterIndex],
  StatsOps USING [];

StatsStrings: MONITOR IMPORTS String EXPORTS StatsDefs, StatsOps =
  BEGIN OPEN StatsDefs;

  statText: PUBLIC ARRAY StatCounterIndex OF STRING ←

      -- General
      statMouseTrap: "***** MouseTrap *****", statTime: "MiliSeconds Wall Time",
      statSeconds: "Seconds", statHours: "Hours",

      -- Queue package
      statEnqueue: "Buffers Enqueued", statDequeue: "Buffers Dequeued",
      statXqueue: "Buffers extracted from a queue",
      statDequeueNIL: "Empty Dequeue calls",
      statXqueueNIL: "Empty ExtractFromQueue calls",

      statNoBuffer: "FreeQueue Empty", statBufferWaits: "Waits for a Buffer",
      "MilliSeconds wall time spent recycling inactive Buffers",

      -- Router
      statZappedP: "Zapped Packets", statJunkBroadcastPups: "Junk Broadcast Pups",
      statJunkBroadcastOis: "Junk Broadcast OIS Packets",
      statJunkPupsForUsNoLocalSocket: "Junk Pups For Us - No Local Socket",
      statJunkOisForUsNoLocalSocket: "Junk OIS Packets For Us - No Local Socket",
      statPacketsDiscarded: "Packets Discarded",
      statPupsDiscarded: "Pups Discarded",
      statOisDiscarded: "OIS Packets Discarded", statPupReceived: "Pups Received",
      statOisReceived: "OIS Packets Received", statPupForwarded: "Pups Forwarded",
      statOisForwarded: "OIS Packets Forwarded", statPupSent: "Pups Sent",
      statOisSent: "OIS Packets Sent", statPupBroadcast: "Pups Broadcast",
      statOisBroadcast: "OIS Packets Broadcast",
      statPupGatewayPacketsRecv: "Pup Gateway Info Packets Received",
      statOisGatewayPacketsRecv: "OIS Gateway Info Packets Received",
      statErrorPupsSent: "Error Pups sent",
      statOisErrorPacketsSent: "OIS Error Packets sent",
      statPupsSentNowhere: "Pups Sent to Unknown Network",
      statOisSentNowhere: "OIS Packets Sent to Unknown Network",
      statPupNotForwarded: "Pups Not Forwarded",
      statOisNotForwarded: "OIS Packets Not Forwarded",
      statPupInputQueueOverflow: "Pups recycled - Input Queue Full",
      statOisInputQueueOverflow: "OIS Packets recycled - Input Queue Full",
      pupTooShort: "Pups received with length less than 22 bytes ***",
      statReceivedBadPupChecksum: "Pups received with Bad Software Checksum ***",
      "OIS Packets received with Bad Software Checksum ***",

      -- Socket level debugging
      pupsEchoed: "Pups Echoed", pupsBadEchoed: "Pups Echoed with bad checksum",
      pupBytesEchoed: "Bytes in Pups Echoed", packetsEchoed: "Packets Echoed",
      packetsBadEchoed: "Packets Echoed with bad checksum",
      bytesEchoed: "Bytes Echoed",

      -- Ethernet Hardware Interface
      statEtherPacketsSent: "Ether Packets Sent",
      statEtherWordsSent: "Ether Words Sent",
      statEtherPacketsReceived: "Ether Packets Received",
      statEtherWordsReceived: "Ether Words Received",
      statEtherPacketsLocal: "Ether Packets copied Locally",
      statEtherWordsLocal: "Ether Words copied Locally",
      statEtherInUnderOut: "Ether Packets Received while Sending - InUnderOut",

      -- Collisions
      statEtherSendsCollision1: "Collisions - once",
      statEtherSendsCollision2: "Collisions - twice",
      statEtherSendsCollision3: "Collisions - 3",
      statEtherSendsCollision4: "Collisions - 4",
      statEtherSendsCollision5: "Collisions - 5",
      statEtherSendsCollision6: "Collisions - 6",
      statEtherSendsCollision7: "Collisions - 7",
      statEtherSendsCollision8: "Collisions - 8",
      statEtherSendsCollision9: "Collisions - 9",
      statEtherSendsCollision10: "Collisions - 10",
      statEtherSendsCollision11: "Collisions - 11",
      statEtherSendsCollision12: "Collisions - 12",
      statEtherSendsCollision13: "Collisions - 13",
      statEtherSendsCollision14: "Collisions - 14",
      statEtherSendsCollision15: "Collisions - 15",
      statEtherSendsCollisionLoadOverflow: "Collisions - too many",

      -- Ethernet driver Glitches
      statEtherLostInterrupts: "Lost Ethernet Interrupts  ************",
      statEtherMissingStatus: "Missing Ethernet Interrupt Status",
      statEtherInterruptDuringInterrupt: "Ethernet Interrupts during Interrupt",
      statResetDidntPost: "Ethernet Resets didn't Post  ************",
      statInterfaceReset: "Ethernet Interface Reset",
      statPacketsStuckInOutput: "Ethernet Packets Stuck in Output",
      statInputIdle: "Ethernet Input Idle too long",

      -- receiver funnys
      statEtherReceivedNot16: "Ethernet Receiver Not 16 and OK CRC ******",
      statEtherReceivedNot16BadCRC: "Ethernet Receiver Not 16 and Bad CRC",
      statEtherReceivedBadCRC: "Ethernet Receiver with Bad CRC ***",
      statEtherReceivedOverrun: "Ethernet Receiver Overran",
      statEtherReceivedBadStatus: "Ethernet Receiver Bad Status",
      statEtherReceivedTooLong: "Ethernet Packets received that were Too Long",
      "Ethernet Packets Klobbered by Reset (to Send)",
      statEtherEmptyFreeQueue: "Ethernet Packets Recycled - FreeQueue Empty",
      statEtherEmptyNoBuffer: "Ethernet Packets Missed - No Buffer ready",
      statEtherEmptyInputChain: "Ethernet Input Chain was Empty",

      -- transmitter funnys
      statEtherSendWhileReceiving: "Ethernet Packets Sent while Pouring In",
      statEtherSendOverrun: "Ethernet Transmitter Overrun",
      statEtherSendBadStatus: "Ethernet Transmitter Bad Status",
      statEtherSendFromOutputQueue: "Ethernet Packets sent from Output Queue",

      -- 8/32/48 translation things
      cacheFault: "Translation cache faults",
      unsuccessfulTranslation: "Translation failures",
      translationRetries: "Translation retries",
      requestsForMe: "Translation requests for ME",
      cacheDepth: "Translation cache hops",

      -- Streams
      statDataPacketsSent: "Data Packets Sent",
      statDataBytesSent: "Data Bytes Sent",
      statDataPacketsReceived: "Data Packets Received",
      statDataBytesReceived: "Data Bytes Received", statMarksSent: "Marks Sent",
      statMarksReceived: "Marks Received",
      statAckRequestsSent: "Ack Requests Sent",
      statAckRequestsReceived: "Ack Requests Received", statAcksSent: "Acks Sent",
      statAcksReceived: "Acks Received",
      statSystemPacketsSent: "System Packets Sent",
      statSystemPacketsReceived: "System Packets Received",
      statAttentionsSent: "Attentions Sent",
      statAttentionsReceived: "Attentions Received",

      statDataPacketsRetransmitted: "Data Packets Retransmitted",
      statErrorPacketsSent: "Error Packets Sent",
      statErrorPacketsReceived: "Error Packets Received",

      statDataPacketsReceivedAgain: "Data Packets Received Again",
      statDataPacketsReceivedEarly: "Data Packets Received Early",
      statDataPacketsReceivedVeryLate: "Data Packets Received Very Late",

      statProbesSent: "Probes Sent", statProbesReceived: "Probes Received",
      statEmptyFunnys: "Funny Empty Packets", statEmptyAlloc: "Empty Allocates",
      statDuplicateAcks: "Duplicate Acks",

      statPacketsRejectedBadID: "Packets Rejected - Bad ID",
      statPacketsRejectedBadSource: "Packets Rejected - Bad Source",
      statPacketsRejectedBadType: "Packets Rejected - Bad Type",

      -- spares for user use
      statSpares0: NIL, statSpares1: NIL, statSpares2: NIL, statSpares3: NIL,
      statSpares4: NIL, statSpares5: NIL, statSpares6: NIL, statSpares7: NIL,
      statSpares8: NIL, statSpares9: NIL, statSpares10: NIL, statSpares11: NIL,
      statSpares12: NIL, statSpares13: NIL, statSpares14: NIL, statSpares15: NIL,
      statSpares16: NIL, statSpares17: NIL, statSpares18: NIL, statSpares19: NIL,
      statSpares20: NIL, statSpares21: NIL, statSpares22: NIL, statSpares23: NIL,
      statSpares24: NIL, statSpares25: NIL, statSpares26: NIL, statSpares27: NIL,
      statSpares28: NIL, statSpares29: NIL, statSpares30: NIL, statSpares31: NIL,
      statSpares32: NIL, statSpares33: NIL, statSpares34: NIL, statSpares35: NIL,
      statSpares36: NIL, statSpares37: NIL, statSpares38: NIL, statSpares39: NIL,
      statSpares40: NIL, statSpares41: NIL, statSpares42: NIL, statSpares43: NIL,
      statSpares44: NIL, statSpares45: NIL, statSpares46: NIL, statSpares47: NIL,
      statSpares48: NIL, statSpares49: NIL, statSpares50: NIL, statSpares51: NIL,
      statSpares52: NIL, statSpares53: NIL, statSpares54: NIL, statSpares55: NIL,
      statSpares56: NIL, statSpares57: NIL, statSpares58: NIL, statSpares59: NIL,
      statSpares60: NIL, statSpares61: NIL, statSpares62: NIL, statSpares63: NIL,
      statSpares64: NIL, statSpares65: NIL, statSpares66: NIL, statSpares67: NIL,
      statSpares68: NIL, statSpares69: NIL, statSpares70: NIL, statSpares71: NIL,
      statSpares72: NIL, statSpares73: NIL, statSpares74: NIL, statSpares75: NIL,
      statSpares76: NIL, statSpares77: NIL, statSpares78: NIL, statSpares79: NIL,
      statSpares80: NIL, statSpares81: NIL, statSpares82: NIL, statSpares83: NIL,
      statSpares84: NIL, statSpares85: NIL, statSpares86: NIL, statSpares87: NIL,
      statSpares88: NIL, statSpares89: NIL, statSpares90: NIL, statSpares91: NIL,
      statSpares92: NIL, statSpares93: NIL, statSpares94: NIL, statSpares95: NIL,
      statSpares96: NIL, statSpares97: NIL, statSpares98: NIL, statSpares99: NIL];

  StatsStringsFull: PUBLIC ERROR = CODE;

    RETURNS [i: StatCounterIndex] =
    -- first, check for the string already existing
    FOR i IN StatCounterIndex DO
      IF statText[i] # NIL AND String.EquivalentString[s, statText[i]] THEN
    -- its not here yet, find a slot for it
    FOR i IN StatCounterIndex DO
      IF statText[i] = NIL THEN EXIT;
      REPEAT FINISHED => ERROR StatsStringsFull;
    statText[i] ← s; -- NB: Not copied over


    BEGIN RETURN[@statText]; END;

  -- initialization