         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
$EDIT VOID=00280000                                            << 9478>>00275000
COMMENT                                                        << 9478>>00730953
************************************************************** << 9478>>00730968
* THE FOLLOWING EQUATES ARE USED IN BOTH NRIO AND MESSAGE    * << 9478>>00730984
* CHANGES MUST BE MADE IN BOTH ROUTINES.                     * << 9478>>00731000
************************************************************** << 9478>>00731015
                                                               << 9478>>00731031
IO MESSAGE DST HEADER ENTRY FORMAT:                            << 9478>>00731046
                                                               << 9478>>00731062
            |----------------------------------------|         << 9478>>00731078
ENTRY 0+ 0  |      NUMBER OF CONFIGURED ENTRIES      |         << 9478>>00731093
            |----------------------------------------|         << 9478>>00731109
       + 1  |         ENTRY LENGTH IN WORDS          |         << 9478>>00731125
            |----------------------------------------|         << 9478>>00731140
       + 2  |      NUMBER OF UNASSIGNED ENTRIES      |         << 9478>>00731156
            |----------------------------------------|         << 9478>>00731171
       + 3  | TABLE RELATIVE INDEX TO 1ST UNASSIGNED |         << 9478>>00731187
            |----------------------------------------|         << 9478>>00731203
       + 4  | TABLE RELATIVE INDEX TO LAST FREE ENTRY|         << 9478>>00731218
            |----------------------------------------|         << 9478>>00731234
                                                               << 9478>>00731250
;                                                              << 9478>>00731265
EQUATE                                                         << 9478>>00731281
  NUM'ENTRIES =0,  !# OF CONFIGURED ENTRIES                    << 9478>>00731296
  ENTRY'LENGTH=1,  !ENTRY LENGTH IN WORDS                      << 9478>>00731312
  NUM'FREE    =2,  !# OF UNASSIGNED ENTRIES                    << 9478>>00731328
  FIRST'FREE  =3,  !TABLE RELATIVE INDEX TO 1ST UNASSIGNED     << 9478>>00731343
  LAST'FREE   =4,  !TABLE RELATIVE INDEX TO LAST FREE ENTRY    << 9478>>00731359
  HEADER'SIZE =LAST'FREE+1,  !SIZE OF MESSAGE TABLE HEADER     << 9478>>00731375
                                                               << 9478>>00731390
  NUM'MSG'BUFS=32; !NUMBER OF MESSAGE BUFFERS IN MSG DST       << 9478>>00731406
                                                               << 9478>>00731421
   OPTION INTERNAL,UNCALLABLE;                                 << 9227>>01820000
EQUATE MAXPRTCNT=2;  !MAX # OF LINES OF A MESSAGE TO PRINT     << 9478>>04720250
MOVEFROMDSEG(@MSG'DST'BUF,IOMSGDST,0,HEADER'SIZE);             << 9478>>05035000
IF MSG'DST'BUF(FIRST'FREE)=0 THEN                              << 9478>>05050000
                                                               << 9478>>05055250
  <<DON'T LET IOMESSPROC GET IMPEDED>>                         << 9478>>05055500
  IF MYPIN=IOMSGPROC THEN                                      << 9478>>05055750
    BEGIN                                                      << 9478>>05056000
    RELSIR(MSGSIR,SIRN);  !RELEASE MESSAGE SIR                 << 9478>>05056250
    GETXDSBUF:=0;         !INDICATE TO CALLER NO MORE BUFFERS  << 9478>>05056500
    RETURN;                                                    << 9478>>05056750
    END;                                                       << 9478>>05057000
                                                               << 9478>>05057250
  IF MSG'DST'BUF(FIRST'FREE) >                                 << 9478>>05260000
    (MSG'DST'BUF(NUM'ENTRIES)*MSG'DST'BUF(ENTRY'LENGTH))       << 9478>>05260250
    (MSG'DST'BUF(FIRST'FREE)-HEADER'SIZE) MOD                  << 9478>>05270000
      MSG'DST'BUF(ENTRY'LENGTH) <> 0 THEN                      << 9478>>05270250
  GETXDSBUF := MSG'DST'BUF(FIRST'FREE);                        << 9478>>05305000
  MOVEFROMDSEG(@MSG'DST'BUF(FIRST'FREE),IOMSGDST,              << 9478>>05320000
    MSG'DST'BUF(FIRST'FREE),1);                                << 9478>>05320250
  IF MSG'DST'BUF(FIRST'FREE) = 0 THEN                          << 9478>>05330000
    MSG'DST'BUF(LAST'FREE) := 0;                               << 9478>>05335000
  << DECREMENT NUMBER OF AVAILABLE ENTRIES BY 1>>              << 9478>>05335250
  MSG'DST'BUF(NUM'FREE):=MSG'DST'BUF(NUM'FREE)-1;              << 9478>>05335500
                                                               << 9478>>05335750
<< WRITE UPDATED MESSAGE HEADER BACK>>                         << 9478>>05336000
  MOVETODSEG(IOMSGDST,0,@MSG'DST'BUF,HEADER'SIZE);             << 9478>>05340000
<<NOTE:  THERE HAS BEEN A CHANGE TO PRINTIT TO CORRECT A >>    << 9478>>05370250
<<       PROBLEM WITH THE CONSOLE'S MESSAGE BUFFER       >>    << 9478>>05370500
<<       FILLING UP BECAUSE IT WAS LEFT IN A STATE WHERE >>    << 9478>>05370750
<<       IT COULDN'T RECEIVE MESSAGES (SOME TEXT WAS     >>    << 9478>>05371000
<<       ENTERED BUT NO CARRIAGE RETURN WAS HIT TO       >>    << 9478>>05371250
<<       TERMINATE INPUT).  IF THIS HAPPENS, THEN THE    >>    << 9478>>05371500
<<       CONSOLE MESSAGE WILL BE TRUNCATED, BUT IT WILL  >>    << 9478>>05371750
<<       BE FULLY LOGGED ON THE LOG FILE.                >>    << 9478>>05372000
                                                               << 9478>>05372250
        <<IF CALLER=IOMESSPROC, BYPASS I/O TO CONSOLE>>        << 9478>>05575000
        IF MYPIN=IOMSGPROC THEN GOTO PRTITEND                  << 9478>>05575250
          ELSE CCLRETN;                                        << 9478>>05575500
PRTITEND:                                                      << 9478>>05820250
DSTN1 := (SBUFSIZEW*NUM'MSG'BUFS)+HEADER'SIZE;                 << 9478>>09460000
<< SETUP MESSAGE TABLE HEADER>>                                << 9478>>09490000
DIRECTORY(ENTRY'LENGTH):=SBUFSIZEW;  !SIZE OF MESSAGE BUFFER   << 9478>>09500000
DIRECTORY(NUM'FREE):=NUM'MSG'BUFS;   !# OF FREE ENTRIES        << 9478>>09500250
DIRECTORY(FIRST'FREE):=HEADER'SIZE;  !POINTER TO FIRST AVAIL   << 9478>>09505000
DIRECTORY(LAST'FREE):=(SBUFSIZEW*(NUM'MSG'BUFS-1))+HEADER'SIZE;<< 9478>>09510000
MOVETODSEG(IOMSGDST,0,@DIRECTORY,HEADER'SIZE);                 << 9478>>09515000
ECODE := HEADER'SIZE;   !DISPLACEMENT TO START OF BUFFERS      << 9478>>09535000
