!***COPYRIGHT (C) 1974, 1975, 1976, 1977 DIGITAL EQUIPMENT CORP., MAYNARD, MASS.*** MODULE DMR(RESERVE(#11, #12, #13, #14), SREG = #17, FREG = #16, DREGS = 4, VREG = #15, MLIST, TIMER = EXTERNAL(SIX12), FSAVE, ENTRIES=(DMR)) = BEGIN REQUIRE DATA.BLI; ! EVERYONE NEEDS THIS COMMENT; !SPECIAL.BLI !======= === ! LAST MODIFIED: 29 JUN 76 BY CDO EXTERNAL DMRLEAF, KILGROUP, UNDEFER, GETREQUEST, MAKEMSG, SKIPCHUNKS, MAKEBP, OUTMSG; COMMENT; ! ROUTINE DMR ! ======= === ! THIS ROUTINE HANDLES THE REQUEST FOR DEFERRED MESSAGES TRANSACTION CODE !NOTE: TO OBTAIN THE NUMBER OF DEFERRED MESSAGES DESIRED, THE ! FOLLOWING ASSUMPTIONS ARE MADE: ! ! 1. THE TEXT IS ASCII ! 2. LEADING BLANKS ( SPACES AND TABS ) ARE IGNORED ! 3. ANY NON-NUMERIC CHARACTER OR END INDICATOR STOPS THE ! CONVERSION. GLOBAL ROUTINE DMR = BEGIN REGISTER COUNT, SRCPTR, GHPTR, CHAR; LOCAL CHARLEFT, MSGCHUNKS, MHPTR, CHUNKPTR, BPIN; MAP FORMAT GHPTR; MAP FORMAT SRCPTR; MAP FORMAT CHUNKPTR; MAP FORMAT MHPTR; MACRO NEXTCHAR = BEGIN LABEL LOOP; LOOP: BEGIN WHILE ( CHARLEFT _ .CHARLEFT - 1 ) LSS 0 DO ! IF NO CHARACTERS LEFT ! IN THIS CHUNK GET ANOTHER BEGIN IF ( CHUNKPTR _ .CHUNKPTR[C0LINK]) EQL 0 THEN LEAVE LOOP WITH CHAR _ 0; BPIN _ CHUNKPTR[C0DATA]; BPIN _ 36; CHARLEFT _ .CHUNKPTR[C0BCNT] END; CHAR _ SCANI(BPIN) END END$; IF (GHPTR _ GETREQUEST(DMRLEAF)) EQL 0 THEN RETURN; IF .GHPTR[G0TYPEOFSENDER] EQL LEAFTYPE THEN RETURN; SRCPTR _ .GHPTR[G0SENDER]; ! GET THE SENDER MHPTR _ .GHPTR[ G0FMHPTR ]; CHUNKPTR _ .MHPTR[ M0INCHNK ]; IF ( CHUNKPTR _ SKIPCHUNKS( .CHUNKPTR, .MHPTR[ M0SOT ], FALSE ) ) NEQ 0 THEN BEGIN COUNT _ .CHUNKPTR; BPIN _ MAKEBP( .CHUNKPTR, .COUNT ); CHARLEFT _ .CHUNKPTR[ C0BCNT ] - .COUNT; COUNT _ 0; ! START WITH COUNT OF 0 NEXTCHAR; ! GET FIRST CHARACTER ! OBTAIN THE NUMBER WANTED FROM THE MESSAGE TEXT WHILE .CHAR EQL SPACECHAR OR .CHAR EQL TABCHAR DO !SKIP LEADING SPACES OR TABS NEXTCHAR; IF .CHAR NEQ 0 THEN WHILE .CHAR LEQ "9" AND .CHAR GEQ "0" DO ! GATHER THE NUMBER WANTED BEGIN COUNT _ .COUNT * 10 + ( .CHAR - "0" ); NEXTCHAR END; IF .COUNT EQL 0 THEN COUNT _ 1 ! IF NO NUMBER SPECIFIED SEND ONE END ELSE COUNT _ 1; IF .SRCPTR[ S0DFGCNT ] EQL 0 !ANY DEFERRED MESSAGES TO OUTPUT? THEN BEGIN !**NO** TELL USER NONE ! MAKE MESSAGE WITH DATE AND TIME MSGCHUNKS _ MAKEMSG( PAZ '%Z%?M?JNO DEFERRED MESSAGES AVAILABLE?M?J@',0,0,0,0,0); ! SEND THE MESSAGE OUTMSG(.MSGCHUNKS,.SRCPTR[S0PORTPTR],FALSE,FALSE) END ELSE BEGIN !**YES** OUTPUT THE NUMBER HE WANTED ! LINK THE MESSAGE TO SEND TO THE IMMEDIATE OUTPUT LIST UNDEFER( .SRCPTR, .COUNT ) END; ! CLEAN UP KILGROUP( .GHPTR, -1); ! ALL DONE END; END; ! END OF DMR