EXTERNALROUTINE VIEWTELL(STRING (255)S)
EXTERNALINTEGERFNSPEC C
DCONNECT(STRING (6)USER, STRING (11)FILE, INTEGER FSYS, MODE, APF, C
INTEGERNAME SEG, GAP)
EXTERNALINTEGERFNSPEC C
DDISCONNECT(STRING (6)USER, STRING (11)FILE, INTEGER FSYS,DSTRY)
EXTERNALINTEGERFNSPEC C
NWFILEAD(STRING (11)FILE, INTEGER PGS)
SYSTEMROUTINESPEC C
MOVE(INTEGER LEN, FROM, TO)
RECORDFORMAT C
UINFF (STRING (6) USER, STRING (31) JOBDOCFILE, C
INTEGER MARK, FSYS, PROCNO, ISUFF, REASON, BATCHID, SESSICLIM, C
SCIDENSAD, SCIDENS, STARTCNSL, AIOSTAT, SCT DATE, C
SYNC1 DEST, SYNC2 DEST, ASYNC DEST, AACCT REC, AIC REVS, C
STRING (15)JOBNAME, STRING (31)BASEFILE, INTEGER PREVIC, C
INTEGER ITADDRO, ITADDR1, ITADDR2, ITADDR3, ITADDR4, C
STREAM ID, DIDENT, SCARCITY, PREEMPTAT, STRING (11)SPOOLRFILE, C
INTEGER FUNDS, SESSLEN, PRIORITY, TAPES, DISCS, UEND)
EXTERNALROUTINESPEC VIEW(STRING (63) S)
ROUTINESPEC GET LAST MSG(INTEGER B,INTEGERNAME PP)
INTEGER A, J, SEG, GAP
RECORD (UINFF) NAME UINF
HALFINTEGER VSTART
INTEGER BASE,PTR,LEN,NEWPTR,SUCCESS,WRAP,RSTART,TOP
INTEGER ST,FI,DIFF,REST,LASTPTR
STRING (4) VFINISH
OWNINTEGER BELL=X'07'
WRAP=0
SUCCESS=0
VSTART=M'!<'
VFINISH="
!>
"
ST=ADDR(VSTART)
FI=ADDR(VFINISH)+1
UINF == RECORD(9<<18)
S = UINF_USER IF S = ""
SEG = 0
GAP = 0
J = DCONNECT(S, "#MSG", -1, 11, 0, SEG, GAP)
UNLESS 0 # J # 34 START
A =NWFILEAD("T#OUT", 1)
UNLESS A = 0 START
MOVE(4096, SEG<<18, A)
INTEGER(A+12) = 3; ! CH FILE
PRINTSTRING("T#OUT WRITTEN")
NEWLINE
FINISH ELSE START
PRINTSTRING("NWFILEAD FAILED")
WRITE(A,1); NEWLINE
FINISH
BASE=NWFILEAD("SS#RETELL",2)
IF BASE=0 THEN START
PRINTSTRING("NWFILEAD FAILED ")
WRITE(BASE,1); NEWLINE
RETURN
FINISH
INTEGER(BASE+12)=3
NEWPTR=32
TOP=INTEGER(A+8)
PTR=INTEGER(A+24)
RSTART=PTR
CYCLE
LASTPTR=PTR
GET LAST MSG(A,PTR)
EXIT IF SUCCESS=1
MOVE(2,ST,BASE+NEWPTR)
NEWPTR=NEWPTR+2
UNLESS WRAP=2 THEN START
LEN=LASTPTR-PTR
MOVE(LEN,A+PTR,BASE+NEWPTR)
FINISH ELSE START
DIFF=TOP-PTR
MOVE(DIFF,A+PTR,BASE+NEWPTR)
REST=LASTPTR-32
MOVE(REST,A+32,BASE+NEWPTR+DIFF)
LEN=DIFF+REST
FINISH
MOVE(4,FI,BASE+NEWPTR+LEN)
NEWPTR=NEWPTR+LEN+4
REPEAT
IF SUCCESS=1 THEN START
PRINTSTRING("SS#RETELL WRITTEN SUCCESSFULLY")
NEWLINE
INTEGER(BASE)=NEWPTR
VIEW("SS#RETELL")
FINISH
J = DDISCONNECT(S, "#MSG", -1, 0) IF J = 0
FINISH
PRINTSTRING("J =") AND WRITE(J, 1) IF 34 # J # 0
NEWLINE
ROUTINE GET LAST MSG(INTEGER B,INTEGERNAME PP)
INTEGER P,SAVE,X
P=PP
IF WRAP=2 THEN WRAP=1
CYCLE
CYCLE
P=P-1
IF P<=31 THEN P=TOP-1 AND WRAP=2
IF WRAP>0 AND P<RSTART THEN SUCCESS=1 AND RETURN
REPEAT UNTIL BYTEINTEGER (B+P)='*'
IF BYTEINTEGER (B+P-1)='*' THEN START
P=P-1
PP=P
IF BYTEINTEGER(B+P+8)#BELL THEN CONTINUE
X=B+P+1
SAVE=BYTEINTEGER(X)
BYTEINTEGER(X)=6
IF STRING(X)="MAILER" ORC
STRING(X)="VOLUMS" ORC
STRING(X)=S THEN START
BYTEINTEGER(X)=SAVE
LASTPTR=P
IF WRAP=2 THEN WRAP=1
CONTINUE
FINISH
BYTEINTEGER(X)=SAVE
EXIT
FINISH
REPEAT
END
END
ENDOFFILE