Excercise 4-B source
This commit is contained in:
parent
b04641067f
commit
c2f77fd7dc
|
@ -0,0 +1,70 @@
|
||||||
|
TITLE REVERSE - Example 4-B
|
||||||
|
SEARCH MONSYM
|
||||||
|
|
||||||
|
COMMENT $
|
||||||
|
This is another program to demonstrate the reversal of the
|
||||||
|
characters of an input line.
|
||||||
|
|
||||||
|
The structure or organizatino of this program is similar to
|
||||||
|
that found in example 4-A. In contrast to example 4-A, this
|
||||||
|
program uses the byte instructions to make character processing
|
||||||
|
easier.
|
||||||
|
$
|
||||||
|
|
||||||
|
A=1 ;Assign symbolic names to
|
||||||
|
B=2 ;the accumulators
|
||||||
|
C=3
|
||||||
|
P=17 ;Symbolic for push down pointer
|
||||||
|
|
||||||
|
BUFLEN==40
|
||||||
|
PDLEN==240
|
||||||
|
|
||||||
|
IBUFR: BLOCK BUFLEN ;buffer for input line
|
||||||
|
OBUFR: BLOCK BUFLEN+1 ;buffer for output line
|
||||||
|
PDLIST: BLOCK PDLEN
|
||||||
|
|
||||||
|
START: RESET ;initialize IO
|
||||||
|
MOVE P,[IOWD PDLEN,PDLIST] ;initial stack pointer
|
||||||
|
GETLIN: HRROI A,[ASCIZ/Reverse a line: /]
|
||||||
|
MOVE C,A ;save this prompt for RDTTY
|
||||||
|
PSOUT ;prompt for a line
|
||||||
|
HRROI A,IBUFR ;Setup buffer space for RDTTY
|
||||||
|
MOVEI B,BUFLEN*5-1 ;size of buffer
|
||||||
|
RDTTY ;read a line
|
||||||
|
ERJMP ERROR
|
||||||
|
MOVE B,[POINT 7,IBUFR] ;Initial input pointer to line
|
||||||
|
INLOOP: ILDB A,B ;gobble a byte
|
||||||
|
CAIN A,15 ;is it carriage return
|
||||||
|
JRST INLOOP ;discard return
|
||||||
|
CAIN A,12 ;is it the line-feed?
|
||||||
|
JRST INDONE ;yes. finish with line
|
||||||
|
JUMPE A,INDONE ;jump in case of input buffer overrun.
|
||||||
|
PUSH P,A ;normal character, save it.
|
||||||
|
JRST INLOOP ;loop thru line
|
||||||
|
|
||||||
|
INDONE: CAMN P,[IOWD PDLEN,PDLIST] ;is the stack empty?
|
||||||
|
JRST STOP ;yes, line was all blank
|
||||||
|
HRROI A,[ASCIZ/Reversed line: /] ;tell them what's coming
|
||||||
|
PSOUT
|
||||||
|
MOVE B,[POINT 7,OBUFR] ;Initialize output pointer
|
||||||
|
OUTLOO: POP P,A ;get a byte from stack
|
||||||
|
IDPB A,B ;store the byte
|
||||||
|
CAME P,[IOWD PDLEN,PDLIST] ;Is the stack unwound now,
|
||||||
|
JRST OUTLOO ;no. loop until stack empties
|
||||||
|
MOVEI A,15 ;stack is now empty.
|
||||||
|
IDPB A,B ;add cr at end of line
|
||||||
|
MOVEI A,12
|
||||||
|
IDPB A,B ;add lf
|
||||||
|
MOVEI A,0
|
||||||
|
IDPB A,B ;end with null for PSOUT
|
||||||
|
HRROI A,OBUFR
|
||||||
|
PSOUT ;type buffer
|
||||||
|
JRST GETLIN
|
||||||
|
|
||||||
|
ERROR: HRROI A,[ASCIZ/ERROR in RDTTY.
|
||||||
|
/]
|
||||||
|
PSOUT
|
||||||
|
STOP: HALTF ;stop at a blank line
|
||||||
|
JRST STOP ;stay stopped.
|
||||||
|
|
||||||
|
END START
|
Loading…
Reference in New Issue