*DECK MALET 
          IDENT  MALET
          SST 
*CALL,VERS
          COMMENT MAINTENANCE APPLICATION LANGUAGE FOR EQUIP TEST "VERS"
**        AUTHORS 
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         MALET - MAINTENCE APPLICATION LANGUAGE FOR EQUIPMENT TESTING. 
* 
* 
          TITLE  MALET (MAINT. APPLICATION LANGUAGE FOR EQUIP. TESTING) 
*CALL,CPYCOM
*IF,DEF,NOS 
*ENDIF
*CALL,ASSYTAG 
          LIST   F
          IFEQ   NOS,1,2
          LDSET  EPT=MALET
          LDSET  EPT=SSJ= 
          LCC    OVERLAY(MALET,0,0) 
          ENTRY  MALET
 FWAD     BSS    0
  
*CALL,VERS
*IF DEF,8LPI,1
 LPHI     EQU    4           NUMBER OF LINES PER HALF-INCH ON OUTPUT
*IF -DEF,8LPI,1 
 LPHI     EQU    3           NUMBER OF LINES PER HALF-INCH ON OUTPUT
*IF DEF,PAPER85,1 
 PAGEL    EQU    17          NUMBER OF HALF-INCHES PER PAGE LENGTH
*IF -DEF,PAPER85,1
 PAGEL    EQU    22          NUMBER OF HALF-INCHES PER PAGE LENGTH
          TITLE 
          EJECT 
          EJECT 
* 
* 
*         MAIN OVERLAY SUBROUTINE ENTRY POINTS
* 
          ENTRY  BANNER 
          ENTRY  BANVER 
          ENTRY  BLK
          ENTRY  CHKSUM 
          ENTRY  CNTLINE
          ENTRY  CNTMAX 
          ENTRY  CRACK
          ENTRY  CVTDEC 
          ENTRY  CVTDIS 
          ENTRY  CVTHXB 
          ENTRY  CVTINT 
          ENTRY  FILL 
          ENTRY  KLM
          ENTRY  LOADOVL
          ENTRY  MAL1A
          ENTRY  MSG
          ENTRY  PAGESIZ
          ENTRY  POST 
          ENTRY  PRINT
          ENTRY  RDINP
          ENTRY  SBYTE
          ENTRY  SEARCH 
          ENTRY  SVREG
          ENTRY  UPS
          ENTRY  WRSFILE
* 
*         DATA AREA ENTRY POINTS
* 
          ENTRY  AA 
          ENTRY  BINARY 
          ENTRY  BLANKS 
          ENTRY  BUFIN
          ENTRY  CALLMLD
          ENTRY  CALLMSB
          ENTRY  CALLWLD
          ENTRY  CB 
          ENTRY  CRKBUF 
          ENTRY  CVLCH
          ENTRY  DB 
          ENTRY  DIRC 
          ENTRY  DS 
          ENTRY  DUMFET 
          ENTRY  EMB
          ENTRY  EMBL 
          ENTRY  END0 
          ENTRY  INDEX
          ENTRY  LSCR 
          ENTRY  LIPIBUF
          ENTRY  IPIBUF 
          ENTRY  INPUT
          ENTRY  IRB
          ENTRY  KEY
          ENTRY  KLAC 
          ENTRY  KLBFZ
          ENTRY  KLC
          ENTRY  KLCSU
          ENTRY  KLCSUID
          ENTRY  KLDC 
          ENTRY  KLDC1
          ENTRY  KLLL 
          ENTRY  KLMSA
          ENTRY  KLMSAID
          ENTRY  KLMSG
          ENTRY  KLMST
          ENTRY  KLMSTID
          ENTRY  KLMSTPH
          ENTRY  KLPAR
          ENTRY  KLPAR0 
          ENTRY  KLPPU
          ENTRY  KLPT 
          ENTRY  KLSW 
          ENTRY  KLRSW
          ENTRY  KLNAD
          ENTRY  KLTCU
          ENTRY  KLSCR
          ENTRY  KLSN 
          ENTRY  LINDEX 
          ENTRY  LINDEXL
          ENTRY  LINES
          ENTRY  LLINES 
          ENTRY  LMODULE
          ENTRY  LSOURCE
          ENTRY  LXRBUF 
          ENTRY  MB 
          ENTRY  MODULE 
          ENTRY  MSOURCE
          ENTRY  MTRA 
          ENTRY  MTRCUR 
          ENTRY  MTRIN
          ENTRY  MTRLST 
          ENTRY  ORB
          ENTRY  PB 
          ENTRY  PCRK 
          ENTRY  PDATE
          ENTRY  PDATAL 
          ENTRY  PFORMAT
          ENTRY  PLINE
          ENTRY  PNAME
          ENTRY  PPMT 
          ENTRY  PPUD 
          ENTRY  PPUDIS 
          ENTRY  PREFIX 
          ENTRY  PSOURCE
          ENTRY  PTIME
          ENTRY  PURA 
          ENTRY  PXRBUF 
          ENTRY  RDIC 
          ENTRY  RDID 
          ENTRY  RFILE
          ENTRY  RUNDIS 
          ENTRY  SBPIR
          ENTRY  SCR
          ENTRY  SECURE 
          ENTRY  STATUSX
          ENTRY  STPMSG 
          ENTRY  SVRBUF6
          ENTRY  SVRB2
          ENTRY  SVRB7
          ENTRY  UPKL 
          ENTRY  UPPBUF 
          ENTRY  VER
          ENTRY  VERSION
          ENTRY  WATT 
          ENTRY  WATT2
          ENTRY  WCH1 
          ENTRY  WCSU 
          ENTRY  WCSU2
          ENTRY  WDB
          ENTRY  WDEVIC 
          ENTRY  WDEVIC2
          ENTRY  WDSN 
          ENTRY  WEST 
          ENTRY  WEST2
          ENTRY  WEQIP
          ENTRY  WMSID
          ENTRY  WMST 
          ENTRY  WMSTPH 
          ENTRY  WRC
          ENTRY  WRC2 
          ENTRY  WUNIT
          ENTRY  XRBUF
          ENTRY  XRBUFM 
          ENTRY  XRFLAG 
* 
*     MODULE BUFFER ENTRY POINTS
* 
          ENTRY  CLINE
          ENTRY  CODE 
          ENTRY  DATA 
          ENTRY  FORMAT 
          ENTRY  HEADER 
          ENTRY  LCODE
          ENTRY  LHEADER
          ENTRY  LSOURCE
          ENTRY  SOURCE 
          ENTRY  TPARM1 
          ENTRY  TPARM1L
* 
* 
* 
*CALL MALMAC
  
*         K/L DISPLAY BUFFER AREA.
  
          ENTRY  KEYS 
          ENTRY  CYCLE
 KEYS     BSSZ   7
 CYCLE    BSSZ   1
  
          IFEQ   NOS,1,2
          BSSZ   7
+         VFD    12/6000B,12/7702B,12/6000B,24/4R 
  
          IFEQ   NOSBE,1,1
+         VFD    6/END0-*,6/0,12/6000B,12/7734B,24/4R 
  
 VER      VFD    36/6LMALET ,42/7L"VERS",42/7L  MAINT 
          DATA   40L APPLICATION LANGUAGE FOR EQUIP TESTING 
  
 END0     EQU    *
 AA       EQU    *+1
  
          IFEQ   NOSBE,1,1
 KLINE    SET    45 
  
          IFEQ   NOS,1,1
 KLINE    SET    44 
  
          IFEQ   NOS+NOS4+NOS5+NOS6,1,1 
          DUP    20 
          IFEQ   NOS+NOS4+NOS5+NOS6+NOSBE+NOSBE4+NOSBE5+NOSBE6,2,1
          DUP    40 
  
          IFEQ   NOS+NOS4+NOS5+NOS6,1,1 
+         VFD    12/6000B,12/6000B,12/7012B+10*KLINE,24/4R
          IFEQ   NOS+NOS4+NOS5+NOS6,2,1 
+         VFD    12/6000B,12/6000B,12/7000B+10*KLINE,24/4R
  
          IFEQ   NOSBE,1,1
+         VFD    6/7,6/0,12/6000B,12/7000B+10*KLINE,24/4R 
  
          DATA   30L K/L DISPLAY DATA IS
          DATA   30L   STORED  HERE 
  
 KLINE    SET    KLINE-1
          ENDD
  
          IFEQ   NOSBE,1
+         VFD    6/7,6/0,12/6000B,12/7054B,24/4R
 KLMSG    DATA   30L
          DATA   30L
 END1     EQU    *
+         VFD    6/7,6/0,12/6000B,12/7040B,24/4R LIN
          ENDIF 
  
          IFEQ   NOS,1
          IFEQ   NOS+NOS4+NOS5+NOS6,1,1 
 KCOR50   VFD    12/6000B,12/6000B,12/7372B,24/4R 
          IFEQ   NOS+NOS4+NOS5+NOS6,2,1 
+         VFD    12/6000B,12/6000B,12/7050B,24/4R 
 KLMSG    DATA   30L
          DATA   30L
          IFEQ   NOS+NOS4+NOS5+NOS6,1,1 
 KCOR51   VFD    12/6000B,12/6000B,12/7360B,24/4R LIN 
          IFEQ   NOS+NOS4+NOS5+NOS6,2,1 
+         VFD    12/6000B,12/6000B,12/7036B,24/4R LIN 
          ENDIF 
  
 STATUSX  DATA   30LE=000  PPU STATUS = STOPPED 
 RUNDIS   EQU    *-1
          DATA   10L MODULE = 
 MODNME   DATA   20L
 END2     DATA   0
  
*         POINTERS INTO BUFFERS.
  
 PCRK     VFD    60/CRKBUF+1    CRKBUF BUFFER POINTER 
 PSOURCE  VFD    60/SOURCE      SOURCE BUFFER POINTER 
 MSOURCE  VFD    60/SOURCE      MAXIMUM SOURCE LINE ADDRESS 
 PLINE    DATA   0              INPUT LINE NUMBER 
 PXRBUF   VFD    60/XRBUF          CROSS REFERENCE BUFFER POINTER 
 XRFLAG   DATA   0                 LOST CROSSREFERENCE ENTRY COUNTER
 KCOR1    VFD    12/6000B,12/7714B,12/6000B,24/4R 
 KCOR2    VFD    12/6000B,12/7707B,12/6000B,24/4R 
 KCOR22   VFD    12/6000B,12/6000B,12/7214B,24/4R 
 KCOR23   VFD    12/6000B,12/6000B,12/7175B,24/4R LIN 
 TPARM1   BSSZ   12          CONV INTEGER VALUE OF DISP CODE PARAM
 TPARM1L  EQU    *-TPARM1 
  
*CALL MALCD1
 DPARAM   EQU    5           PARAMETER DISPLAY
  
*         FLAGS  FOR EXECUTIVE. 
  
          ENTRY  FAL
          ENTRY  FCERR
          ENTRY  FCHK 
          ENTRY  FCIO 
          ENTRY  MLDCIO 
          ENTRY  MLDCPM 
          ENTRY  SBPCIO 
          ENTRY  SBPCPM 
          ENTRY  WLDCIO 
          ENTRY  WLDCPM 
          ENTRY  FCMNE
          ENTRY  FCMNEA 
          ENTRY  FCMSE
          ENTRY  FCVL 
          ENTRY  FDFT 
          ENTRY  FDIS 
          ENTRY  FDL
          ENTRY  FDROP
          ENTRY  FDRP 
          ENTRY  FEND 
          ENTRY  FEOFI
          ENTRY  FERR 
          ENTRY  FESM 
          ENTRY  FINP 
          ENTRY  FKL
          ENTRY  FLCM 
          ENTRY  FLL
          ENTRY  FLOG 
          ENTRY  FLST 
          ENTRY  FMAXCM 
          ENTRY  FMAXE
          ENTRY  FMAXDM 
          ENTRY  FMSG 
          ENTRY  FPL
          ENTRY  FRC
          ENTRY  FRFILE 
          ENTRY  FRM
          ENTRY  FRT
          ENTRY  FRUN 
          ENTRY  FRUNUP 
          ENTRY  FSB
          ENTRY  FSBPC
          ENTRY  FSBPR
          ENTRY  FSCR 
          ENTRY  FSE
          ENTRY  FSHARE 
          ENTRY  FSTOP
          ENTRY  FSUSPI 
          ENTRY  FSYSRD 
          ENTRY  FSYSWR 
          ENTRY  FTERM
          ENTRY  FTINT
          ENTRY  FTL
          ENTRY  FTSTP
          ENTRY  FULL 
          ENTRY  FXEOF
          ENTRY  FXREF
          ENTRY  F16SN
          ENTRY  F721 
 FAL      DATA   0           ACCESS LEVEL 
 FCERR    DATA   0           COMPILER ERROR(S) FLAG 
 FCHK     DATA   0           PPU CHECKPOINTED FLAG
 FCIO     DATA   0           CIO FLAG FROM ASSIGN 
 FCMNE    DATA   0           FLAG FOR MNE PROVIDED
 FCMNEA   DATA   0           FLAG MNE ON GO/DROP
 FCMSE    DATA   0                 COMPILING FOR OFFLINE FLAG 
 FCVL     DATA   0           FLAG FOR CEVAL CALLED
 FDFT     DATA   1000        DEFAULT LINE LIMIT USED ON LIMIT 
 FDIS     DATA   1           DISPLAY CURRENTLY BEING DISPLAYED
 FDL      DATA   1           DAYFILE LOG ON 
 FDROP    DATA   0           DROP FLAG
 FDRP     DATA   0           DROP FLAG WAITING FOR PPU TO DROP
 FEND     DATA   0           NO END CARD FLAG 
 FEOFI    DATA   0           EOF/EOI INPUT FLAG 
 FERR     DATA   0           SOURCE BUFFER OVERFLOW FLAG
 FESM     DATA   0           FLAG ADDRESS FOR SYSESM COMMANDS 
 FINP     DATA   0           INPUT/KL 0/1 
 FKL      DATA   0           K/L DISPLAY ACTIVE FLAG OFF
 FLCM     DATA   0           NUMBER OF WORDS TRANSFERRED FOR CM COMMANDS
 FLL      DATA   1000        LINES TO PRINT 
 FLOG     DATA   0           LOG LOADING ERROR FLAG 
 FLST     DATA   0           COMPILE OPTIONS OVERIDE
 FMAXCM   DATA   64          MAXIMUM CM WORDS TO CM EOI 
 FMAXE    DATA   377B        MAXIMUM CM WORDS TO ESM EOI
 FMAXDM   DATA   4000B       MAXIMUM CM WORDS TO DMA EOI
 FMSG     DATA   100         DAYFILE MESSAGES TO SEND 
 FPL      DATA   1           PRINT OUTPUT LOG ON
 FRC      DATA   0           REPEAT CONDITION OFF 
 FRFILE   DATA   0           FLAG FOR WRITE DONE ON RFILE 
 FRM      DATA   0           REPEAT MODULE OFF
 FRT      DATA   0           REPEAT TEST OFF
 FRUN     DATA   0           RUNNING FLAG 
 FRUNUP   DATA   0           RUN DIRECTIVE CURRENTLY WAITING FOR INPUT
 FSB      DATA   0           STAND BY PPU FOR I/O OFF 
 FSBPC    DATA   0           FLAG FOR STANDBY PP CALLED 
 FSBPR    DATA   0           FLAG FOR STANDBY PP RESPONDING 
 FSCR     DATA   0           SCRATCH FILE OPEN FLAG 
 FSE      DATA   1           STOP ON ERROR ON 
 FSHARE   DATA   2           SHARE FLAG 2=NO SHARE 0=SHARE
 FSTOP    DATA   0           STOP FLAG
 FSUSPI   DATA   0           SUSPEND READING INPUT FLAG 
 FSYSRD   DATA   0           FLAG FOR SCRATCH FILE PRIMED 
 FSYSWR   DATA   0           FLAG FOR SCRATCH FILE WRITTEN ON 
 FTERM    DATA   0           TERMINAL MODE FLAG 
 FTL      DATA   5           TIME LIMIT 5 SECONDS DEFAULT 
 FTSTAT   DATA   0           TERMINAL STATUS WORD1
 FTSTAT1  DATA   0           TERMINAL STATUS WORD2
 FTSTP    DATA   0           FLAG FOR TERMINAL STOP 
 FULL     DATA   0           LIST INPUT SOURCE ON OUTPUT- 1=ON 0=OFF
 FXEOF    DATA   0           END OF FILE FLAG FOR CROSS-REFERENCE PROC. 
 FXREF    DATA   0           CROSS-REFERENCE ACTIVE FLAG
 F16SN    DATA   0           DISK SN FOR MB+4 WHEN 16-BIT MALET 
 F721     DATA   0           FLAG TO DENOTE 721 CONSOLE 
  
*         FETS FOR FILES. 
  
          ENTRY  PUNCH
          ENTRY  SCRATCH
          ENTRY  BINARY 
          ENTRY  RFILE
          ENTRY  INPUT
          ENTRY  OUTPUT 
          ENTRY  TERMOUT
          ENTRY  ZZZXREF
 BINARY   FILEB  BUFBIN,LBIN,(WSA=MODULE,LMODULE) 
 SCRATCH  FILEB  BUFBIN,LBIN,(WSA=SCR,LSCR) 
 INPUT    FILEC  BUFIN,LIN,(WSA=KEY,LKEY) 
 INPUT1   FILEC  BUFIN,LIN,(WSA=KEY,LKEY) 
 OUTPUT   FILEC  BUFOUT,LOUT,(WSA=CLINE,LCLINE) 
 TERMOUT  FILEC  BUFTERM,LTERM,(WSA=CLINE,LCLINE) 
 PUNCH    FILEC  BUFBIN,LBIN,(WSA=CLINE,LCLINE) 
 RFILE    RFILEB BUFSF,LBUFSF,(WSA=MODULE,LMODULE),(IND=INDEX,LINDEX) 
 ZZZXREF  FILEB  ZZZBUF,LZZZBUF,(WSA=XRBUFM,LXRBUF+1) 
 ZZZBUF   BSS    65 
 LZZZBUF  EQU    *-ZZZBUF 
  
*         PPU CALL WORD DATA. 
  
*MLDCIO   VFD    36/0,12/CCH,11/STATUS,1/C         MLD CALL FOR CIO PP
 MLDCIO   VFD    36/0,12/0,11/0,1/0         MLD CALL FOR CIO PP 
 CALLMLD  VFD    18/3LMLD,6/20B,36/DUMFET    MLD CALL WITH AUTO RECALL
*SBPCIO   VFD    36/0,12/CCH,11/STATUS,1/C         SBP CALL FOR CIO PP
 SBPCIO   VFD    36/0,12/0,11/0,1/0         SBP CALL FOR CIO PP 
 CALLMSB  VFD    18/3LSBP,6/20B,36/DUMFET    MSB CALL WITH AUTO RECALL
*WLDCIO   VFD    36/0,12/CCH,11/STATUS,1/C         WLD CALL FOR CIO PP
 WLDCIO   VFD    36/0,12/0,11/0,1/0         WLD CALL FOR CIO PP 
 CALLWLD  VFD    18/3LWLD,6/20B,36/DUMFET    WLD CALL WITH AUTO RECALL
 MLDCPM   VFD    18/3LCPM,6/20B,12/140B,24/MLDCIO      CPM CALL FOR CIO PP
 SBPCPM   VFD    18/3LCPM,6/20B,12/140B,24/SBPCIO      CPM CALL FOR CIO PP
 WLDCPM   VFD    18/3LCPM,6/20B,12/140B,24/WLDCIO      CPM CALL FOR CIO 
  
 DUMFET   VFD    24/0,12/SECURE,24/2
 SECURE   VFD    48/8LMALET   ,12/0 
 IRB      DATA   301B        INPUT REGISTER PPU COMMANDS/SWITCHES 
 ORB      DATA   0           OUTPUT REGISTER PPU FUNCTIONS
 MB       BSSZ   5           MESSAGE BUFFER 
 XRBUFM   EQU    *
 XRBUF    EQU    *+1               CROSS REFERENCE BUFFER FOR COMPILER
 DB       BSSZ   123         DISPLAY BUFFER CONTAINS DATA DISPLAYED 
 WDB      BSSZ   41          DB + WDB FOR 16-BIT DATA DISPLAY BUFFER
 PB       BSSZ   40          PLOT BUFFER CONTAINS DATA PLOTTED
 CB       BSSZ   975         CHECKPOINT MODULE BUFFER 
 SCR      BSSZ   61          BUFFER FOR SCRATCH FILE READS/WRITES 
 LXRBUF   EQU    *-XRBUF
* 
*         MODULE BUFFER 
* 
 PREFIX   DATA   77000007000000000000B       77 TABLE 
 PNAME    DATA   0           MODULE NAME
 PDATE    DATA   0           DATE 
 LSCR     EQU    *-SCR       LENGTH OF SCRATCH BUFFER 
 PTIME    DATA   0           TIME 
 PPMT     DATA   0           LENGTH OF BINARY 
 PMAL     VFD    42/7LMALET  ,18/3L3.X
 PMAL1    VFD    42/7L"VERS",18/3L6P
 PMAL2    VFD    60/10LP
 PDEMOT   VFD    36/6LDEMOT ,24/4L"VERS"
 MODULE   BSSZ   1453        MODULE BUFFER
 LMODULE  EQU    *-MODULE    LENGTH OF MODULE BUFFER
 LSOURCE  EQU    720         LENGTH OF SOURCE BUFFER
 EMB      BSSZ   120         ERROR MESSAGE BUFFER USED BY OVL AND EXC 
 EMBL     EQU    *-EMB       LENGTH OF ERROR MESSAGE BUFFER 
 SBPIR    DATA   0           STANDBY PPU INPUT  REGISTER
 SBPOR    DATA   0           STANDBY PPU OUTPUT REGISTER
 DS       DATA   1           DS SWITCHES
 FTINT    DATA   0           FLAG FOR TERMINAL INTERRUPT
          IFGE   FTINT+111B,10000B,1   CHECK DRIVER OVERFLOW
          ERR                OVERFLOW ERROR 
  
 CB8K     BSSZ   4500B       CHECKPOINT BUFFER FOR 8K PP
 IPIBUF   BSSZ   4010B       BUFFER FOR IPI DMA READS/WRITES
 LIPIBUF  EQU    *-IPIBUF    LENGTH OF IPI DATA BUFFER
  
*     DATA AND CONSTANTS
* 
 SETA     VFD    60/3L ON 
 BLANK    VFD    60/8L
 BLANKS   VFD    60/10H 
 LINES    BSSZ   120
 LLINES   EQU    *-LINES
 CNTMAX   EQU    PAGEL*LPHI-LPHI-LPHI-1  PRINTABLE LINES PER PAGE -1
 PAGESIZ  EQU    PAGEL*LPHI-1            MAX LINES PER PAGE - 1 
 CNTLINE  DATA   0             CURRENT LINE NUMBER ON PAGE
 VERSION  DATA   2           CML LEVEL 142
* 
*         MESSAGE ENTRY POINTS
* 
          ENTRY  MSGBUF 
          ENTRY  MSGE1
          ENTRY  MSGE1A 
          ENTRY  MSGE2
          ENTRY  MSGE2A 
          ENTRY  MSGE3
          ENTRY  MSGE4
          ENTRY  MSGE5
          ENTRY  MSGE6
          ENTRY  MSGE7
          ENTRY  MSGE8
          ENTRY  MSGE9
          ENTRY  MSGE9A 
          ENTRY  MSGE11 
          ENTRY  MSGE12 
          ENTRY  MSGE13 
          ENTRY  MSGE14 
          ENTRY  MSGE16 
          ENTRY  MSGE17 
          ENTRY  MSGE18 
          ENTRY  MSGE19 
          ENTRY  MSGE20 
          ENTRY  MSGE21 
          ENTRY  MSGE21A
          ENTRY  MSGE23 
          ENTRY  MSGE24 
          ENTRY  MSGE25 
          ENTRY  MSGE28 
          ENTRY  MSGE29 
          ENTRY  MSGE31A
          ENTRY  MSGE32 
          ENTRY  MSGE33 
          ENTRY  MSGE34 
          ENTRY  MSGE35 
          ENTRY  MSGE36 
          ENTRY  MSGE37 
          ENTRY  MSGE38 
          ENTRY  MSGE39 
          ENTRY  MSGE41 
          ENTRY  MSGE42 
          ENTRY  MSGE43 
          ENTRY  MSGE43A                                                 MAL026G
          ENTRY  MSGE45 
          ENTRY  MSGE46 
          ENTRY  MSGE47 
          ENTRY  MSGE48 
          ENTRY  MSGE49 
          ENTRY  MSGE50 
          ENTRY  MSGE51 
          ENTRY  MSGE52 
          ENTRY  MSGE55 
          ENTRY  MSGE56 
          ENTRY  MSGE57 
          ENTRY  MSGE58 
          ENTRY  MSGE60 
          ENTRY  MSGE61 
          ENTRY  MSGE63 
          ENTRY  MSGE63A
          ENTRY  MSGE64 
          ENTRY  MSGE65 
          ENTRY  MSGE66 
          ENTRY  MSGE67 
          ENTRY  MSGE68 
          ENTRY  MSGE69 
          ENTRY  MSGE70 
          ENTRY  MSGE71 
          ENTRY  MSGE72 
          ENTRY  MSGE73 
          ENTRY  MSGE74 
          ENTRY  MSGE75 
          ENTRY  MSGE76 
          ENTRY  MSGE77 
          ENTRY  MSGE78 
          ENTRY  MSGE79 
          ENTRY  MSGE80 
          ENTRY  MSGE81 
          ENTRY  MSGE82 
          ENTRY  MSGE83 
          ENTRY  MSGE84 
          ENTRY  MSGE85 
          ENTRY  MSGE86 
          ENTRY  MSGE87 
          ENTRY  MSGE88 
          ENTRY  MSGE89 
          ENTRY  MSGE90 
          ENTRY  MSGE91 
          ENTRY  MSGE92 
          ENTRY  MSGE93 
          ENTRY  MSGE99 
          ENTRY  MSGE94 
          ENTRY  MSGE95 
          ENTRY  MSGE96 
          ENTRY  MSGE97 
          ENTRY  MSGE98 
          ENTRY  MSGE100
          ENTRY  MSGE101
          ENTRY  MSGE102
          ENTRY  MSGE103
          ENTRY  MSGE104
          ENTRY  MSGE105
          ENTRY  MSGE106
          ENTRY  MSGE107
          ENTRY  MSGE108
          ENTRY  MSGE109
          ENTRY  MSGE110
          ENTRY  MSGE111
          ENTRY  MSGE112
          ENTRY  MSGE113
          ENTRY  MSGE114
          ENTRY  MSGE115
          ENTRY  MSG1 
          ENTRY  MSG2 
          ENTRY  MSG3 
          ENTRY  MSG4 
          ENTRY  MSG5 
          ENTRY  MSG6 
          ENTRY  MSG7 
          ENTRY  MSG8 
          ENTRY  MSG9 
          ENTRY  MSG10
          ENTRY  MSG11
          ENTRY  MSG12
          ENTRY  MSG13
          ENTRY  MSG14
          ENTRY  MSG15
          ENTRY  MSG16
          ENTRY  MSG18
          ENTRY  MSG19
          ENTRY  MSG20
          ENTRY  MSG22
          ENTRY  MSG23
          ENTRY  MSG24
          ENTRY  MSG25
          ENTRY  MSG26
 CVLCH    DATA   0           NUMBER OF PPUS STORED BY INITIAL 
**        BUFFERS - MALET BUFFERS/CONSTANTS.
  
 INDEX    BSSZ   400
 LINDEX   EQU    *-INDEX
 LINDEXL  EQU    INDEX+LINDEX 
 PFORMAT  BSSZ   1
 PDATAF   BSSZ   1
 PDATAL   BSSZ   1
 DIRA     DATA   10HDIRECTIVE=
 DIRB     DATA   10H 12.00.00 
 DIR      DATA   10HDIRECTIVE=
 KEY      BSS    9
 LKEY     EQU    *-KEY
          DATA   0
 HEADER   EQU    MODULE 
 LHEADER  EQU    7
 FORMAT   EQU    MODULE+LHEADER 
 LFORMAT  EQU    168
 DATA     EQU    FORMAT+LFORMAT 
 LDATA    EQU    344         (2010B 16-BIT BYTES) 
 CODE     EQU    DATA+LDATA 
 LCODE    EQU    214
 SOURCE   EQU    MODULE+LHEADER+LFORMAT+LDATA+LCODE 
 BUFIN    BSS    65 
 LIN      EQU    *-BUFIN
 BUFOUT   BSS    65 
 LOUT     EQU    *-BUFOUT 
 BUFTERM  BSS    65 
 LTERM    EQU    *-BUFTERM
 BUFBIN   BSS    65                                                      MAL015G
 LBIN     EQU    *-BUFBIN 
 BUFSF    BSS    65 
 LBUFSF   EQU    *-BUFSF
 CLINE    BSS    14 
 LCLINE   EQU    *-CLINE
          DATA   0
  
*         PARAM DISPLAY DATA. 
  
 KLPAR    DATA   40L                          PARAMETERS
          DATA   20L
 KLPAR0   DATA   40L     P0 = 0000           P1 = 0000
          DATA   20L     P2 = 0000
          DATA   40L     P3 = 0000           P4 = 0000
          DATA   20L     P5 = 0000
          DATA   40L     P6 = 0000           P7 = 0000
          DATA   20L     P8 = 0000
          DATA   40L     P9 = 0000           TL = 0005
          DATA   20L     LL = 1750
 KLLL     EQU    *-1
          DATA   40L----------------------------------------
          DATA   20L--------------------
          DATA   40L                    SWITCH STATUS 
          DATA   20L
 KLSW     DATA   40L ON - (SE) STOP ON ERROR      OFF - (RM)
          DATA   20L REPEAT MODULE
          DATA   40LOFF - (RT) REPEAT TEST        OFF - (SB)
          DATA   20L STANDBY PPU FOR I/O
          DATA   40L ON - (PL) PRINT LOG           ON - (DL)
          DATA   20L DAYFILE LOG
          DATA   40LOFF - (KL) K/L DISPLAY        OFF - (RC)
          DATA   20L REPEAT CONDITION 
          DATA   40L----------------------------------------
          DATA   20L--------------------
          DATA   40L                       ASSIGN VALUES
          DATA   20L
 KLDC     DATA   40L   DC=0000  EST=0000   CH=0000   EQ=0000
          DATA   20L   UN=0000   AL=0000
 KLPT     DATA   40L    PORT=0
          DATA   20L
          DATA   40L               ADDITIONAL ASSIGN VALUES 
          DATA   20L
 KLSCR    EQU    *+4
 KLSN     DATA   40L       SN=000000    SHARE=NO    SCRATCH=
          DATA   20LSCRATCH 
 KLNAD    EQU    *+1
 KLTCU    EQU    *+2
 KLAC     EQU    *+3
 KLBFZ    EQU    *+4
          DATA   40L      LTA=0000  TCU=0000   AC=0000  BFZ=
          DATA   20L0000
 KLDC1    DATA   40L
          DATA   20L
          DATA   40L
          DATA   20L
          DATA   40L           DS REGISTER SWITCH STATUS
          DATA   20L
 KLRSW    DATA   40L ON - (SE) STOP ON ERROR      OFF - (RT)
          DATA   20L REPEAT TEST
          DATA   40LOFF - (RM) REPEAT MODULE      OFF - (RC)
          DATA   20L REPEAT CONDITION 
          DATA   40LOFF - (BC) BEGINNING OF COND  OFF - (BM)
          DATA   20L BEGINNING OF MODULE
          DATA   40LOFF - (BT) BEGINNING OF TEST  OFF - (TE)
          DATA   20L TEST END STOP
          DATA   40LOFF - (CE) CONDITION END STOP OFF - (ME)
          DATA   20L MODULE END STOP
          DATA   40LOFF - (S1) PROGRAMMABLE SW 1  OFF - (S2)
          DATA   20L PROGRAMMABLE SW 2
          DATA   40L----------------------------------------
          DATA   20L--------------------
          DATA   40L
          DATA   20L
          DATA   40L    ADDITIONAL ASSIGN VALUES FOR MSS ONL
          DATA   20LY 
 KLMSA    EQU    *+1
 KLMSAID  EQU    *+2
 KLC      EQU    *+3
          DATA   40L      MSA=0   MSAID=00      C=00/00 
          DATA   20L
 KLCSU    EQU    *+1
 KLCSUID  EQU    *+2
          DATA   40L      CSU=0   CSUID=00
          DATA   20L
 KLMST    EQU    *+1
 KLMSTID  EQU    *+2
 KLMSTPH  EQU    *+3
          DATA   40L      MST=0   MSTID=00  MSTPH=0 
          DATA   20L
          DATA   0
 PURA     DATA   -1          PURGED MODULES NAME PLACED IN TABLE
* 
*     THE FOLLOWING DATA AREA MUST REMAIN CONTIGUOUS
* 
 KLPPU    EQU    *
 UPPBLK   DATA   10H
 UPPBUF   BSSZ   240         PPU DISPLAY BUFFER AREA
 UPKL     BSSZ   6           KL MESSAGE DATA AREA 
          DATA   0
          EJECT 
**        THE FOLLOWING TABLE INTERFACE EXISTS BETWEEN MALET AND
*         CVL COMMON PRODUCT PPU VALIDATION PROGRAM.
* 
*                 59  54          47                 24     11     0
*                -----------------------------------------------+---- 
*         WRC    I                                  I      I RC I C I 
*                I---+---+---+---+------------------+------+----+---I 
*         WEST   I V I S I R I X I                  I      I    EST I 
*                I---+---+---+---+------------------+------+--------I 
*         WCH1   I V I S I R I X I                  I      IPORTI CHI 
*                I---+---+---+---+------------------+------+--------I 
*         WEQIP  I V I S I R I X I                  I      I   EQPN I 
*                I---+---+---+---+------------------+------+--------I 
*         WUNIT  I V I S I R I X I                  I      I     UN I 
*                I---+---+---+---+------------------+------+--------I 
*         WDEVIC I V I S I R I X I                  I DEVM I   DEVC I 
*                I---+---+---+---+------------------+------+--------I 
*         WATT   I                                         I     FC I 
*                I---+---+---+---+-------------------------+--------I 
*         WDSN   I V I S I R I X I    DISK  PACK  SERIAL  NUMBER    I 
*                I---+---+---+---+-------------------------+--------I 
*         WMSID  I V I S I R I X I                         I MSTID  I 
*                I---+---+---+---+-------------------------+--------I 
*         WMSTPH I V I S I R I X I                         I MSTPH  I 
*                I---+---+---+---+-------------------------+--------I 
*         WMST   I V I S I R I X I                         I MST    I 
*                I---+---+---+---+-------------------------+--------I 
*         WCSU   I V I S I R I X I                         I CSU    I 
*                ---------------------------------------------------- 
* 
*         WHERE;
* 
*         RC(11-6) = RESPONSE CODE (SET BY SYSTEM)
* 
*            0 = VALIDATION GRANTED.
* 
*            1 = VALIDATION GRANTED. ALL ELEMENTS CORRECT, BUT AT LEAST 
*                                    ONE ELEMENT OR MORE IS ALREADY IN
*                                    THE TEST AND/OR MAINTENANCE STATE. 
* 
*            2 = VALIDATION GRANTED. ELEMENT  MIGHT  BE   SHARED  WITH
*                                    ANOTHER  MAINFRAME.
* 
*            3 = VALIDATION DENIED. ELEMENT CANNOT BE REMOVED FROM THE
*                                   MAINTENCE  STATE, THE UNIT IS STILL 
*                                   IN TEST.
* 
*            4 = VALIDATION DENIED. COULD NOT FIND ELEMENT. 
* 
*            5 = VALIDATION DENIED. CRITICAL INFO MAY BE DESTROYED. 
* 
*            6 = VALIDATION DENIED. ELEMENT IN USE BY THE SYSTEM. 
* 
*            7 = VALIDATION DENIED. SHARE BYTE NOT SET. 
* 
*           10 = VALIDATION DENIED. ELEMENT ALREADY IN MAINTENANCE
*                                   STATE.
* 
*           11 = VALIDATION DENIED. CVL RESPONSE OUT OF RANGE.
* 
*           12 = VALIDATION DENIED. LOCAL DEVICE CODE INCORRECT.
* 
*           13 = VALIDATION DENIED. REMOTE DEVICE CODE INCORRECT. 
* 
*           14 = VALIDATION DENIED. ACCESS LEVEL TOO HIGH.
* 
*           15 = VALIDATION DENIED. CANNOT ACCESS NETWORK.
* 
*           16 = VALIDATION DENIED. REMOTE NAD CONNECTED TO ITS HOST. 
* 
*           17 = VALIDATION DENIED. NO TCU ENABLES SET. 
* 
*           20 = VALIDATION DENIED. CSU ERROR WHEN LOADING CE CARTRIDGE 
* 
*           21 = VALIDATION DENIED. XY LOCATION EMPTY.
* 
*           22 = VALIDATION DENIED. ISD ERR WHEN LOADING CE CARTRIDGE.
* 
*           23 = VALIDATION DENIED. MSC MOUNTED NOT CE CARTRIDGE. 
* 
*           24 = N.GO/DROP. UNABLE TO READ CARTRIDGE LABEL. 
* 
*           25 = VALIDATION DENIED. PICKER CONTAINS CARTRIDGE.
* 
*           26 = N.GO/DROP. I/O DRAWER(S) OPEN OR IN AND OCCUPIED.
* 
*           27 = N.GO/DROP. UNABLE TO CLR CARTRIDGE(S) FROM MST.
* 
*           30 = VALIDATION DENIED. ILLEGAL CE CARTRIDGE COORDINATE.
* 
*           31 = VALIDATION DENIED. MSS SUBSYSTEM NOT ACTIVE. 
* 
*           32 = VALIDATION DENIED. UNABLE TO ACCESS EQUIPMENT. 
* 
*           33 = VALIDATION DENIED. DEVICE STATUS ERROR.
* 
*           34 = SITUATION INDETERMINATE. NO RESPONSE.
* 
*           35 = VALIDATION DENIED. FSD IN USE(ISD ONLY). 
* 
*           36 = VALIDATION DENIED. FSD NOT DOWN(ISD ONLY). 
* 
*           37 = VALIDATION DENIED. CONTROL MODULE IN USE(ISD ONLY).
* 
*           40 = VALIDATION DENIED. CONTROL MODULE NOT DOWNED(ISD ONLY).
* 
*           41 = GO/DROP. EQ000-VERIFY DOWN ON ALL MAINFRAMES.
*                         OPERATOR ENSURE INDEPENDENT SHARED DEVICE 
*                         DOWNED ON ALL MAINFRAMES. 
* 
*           42 = VALIDATION DENIED. NO BC LOAD ON PREASSIGNMENT.
* 
*           43 = VALIDATION DENIED. FILE NOT FOUND FOR TAPE PREASSIGNMENT.
* 
*           44 = VALIDATION DENIED. USER VALIDATION DENIED. 
* 
*           45 = VALIDATION DENIED. NON-ZERO EXTENDED MEMORY FL.
* 
*           46 = VALIDATION DENIED. LABELED TAPE WAS PREASSIGNED. 
* 
*           47 = VALIDATION DENIED. ENTRY FOUND IN EST. 
* 
*           50 = VALIDATION DENIED. MNE/DEVICE CODE INCOMPATABLE. 
* 
*           51 = VALIDATION DENIED. INCORRECT CEVAL REQUEST PARAMETER(S). 
* 
*           52 = VALIDATION DENIED. ADDRESS OUT OF RANGE. 
* 
*           53 = VALIDATION DENIED. INCORRECT CEVAL PARAMETER COMBINATION.
* 
*           54 = VALIDATION DENIED. ENTRY NOT IN EST. 
* 
*           55 = VALIDATION DENIED. CEVAL I/O SEQUENCE ERROR. 
* 
*           56 = VALIDATION DENIED. NON-ZERO EQUIPMENT NUMBER FOR RMS.
* 
*         C(0) = COMPLETE BIT (SET BY SYSTEM).
* 
*         V(59-55) = VALIDATION ERROR BITS (SET BY SYSTEM). 
* 
*             BIT 59 SET  =  ERROR IN WORD. 
*             BIT 58 SET  =  ERROR IN BYTE 1. 
*             BIT 57 SET  =  ERROR IN BYTE 2. 
*             BIT 56 SET  =  ERROR IN BYTE 3. 
*             BIT 55 SET  =  ERROR IN BYTE 4. 
* 
*         S(54-51) = SHARE BITS,REQUESTS EXCLUSIVE ACCESS IF NON-ZERO.
* 
*             BIT 54 SET  =  EXCLUSIVE ACCESS TO ELEMENT IN BYTE 1. 
*             BIT 53 SET  =  EXCLUSIVE ACCESS TO ELEMENT IN BYTE 2. 
*             BIT 52 SET  =  EXCLUSIVE ACCESS TO ELEMENT IN BYTE 3. 
*             BIT 51 SET  =  EXCLUSIVE ACCESS TO ELEMENT IN BYTE 4. 
* 
*         R(50-49)        = RESERVED. 
* 
*         X(48)           = NON ZERO IF DATA IN WORD. 
* 
*         R(50-49)        = RESERVED. 
* 
*         X(48)           = DATA IN WORD. 
* 
*         EST(11-0)       = EST ORDINAL OF ELEMENT. 
* 
*         CHANNEL(5-0)    = PRIMARY CHANNEL NUMBER. 
* 
*         PORT(7)         = PORT FOR PRIMARY CHANNEL NUMBER.
* 
*         EQPN(11-0)      = EQUIPMENT NUMBER. 
* 
*         UN(11-0)        = UNIT NUMBER.
* 
*         DEVM(23-12)     = DEVICE MNEMONIC.
* 
*         DEVC(11-0)      = DEVICE CODE.
* 
*         FC(11-0)        = FUNCTION ATTRIBUTE BITS.
* 
*         10 8  6543 2 1 0  FUNCTION ATTRIBUTE (FC) BIT NUMBER. 
*         .  .  .  . . . .
*         .  .  .  . . . .. 1  LOAD CONTROLLER MEMORY.
*         .  .  .  . . .       (CONTROLLER SHARE BYTE MUST BE SET)
*         .  .  .  . . .
*         .  .  .  . . .... 2  WRITE ON UNIT. 
*         .  .  .  . .
*         .  .  .  . ...... 4  WON'T USE PREALLOCATION AREA.
*         .  .  .  .
*         .  .  .  ....... 10B RETURN UNIT TO SYSTEM. 
*         .  .  . 
*         .  .  ..........100B DESIGNATED ELEMENT NOT IN SYSTEM EST.
*         .  .
*         .  .............400B DO NOT CREATE LOCAL EM* FILE.
*         . 
*         ...............1000B RETURN RESPONSE CODE AND DO NOT ABORT. 
* 
*         PACK SN(47-0)   = PACK SERIAL NUMBER. 
* 
  
 WRC      DATA   0           CVL PARAMETER WORD 
 WEST     DATA   0           RIGHT JUSTIFIED EST ORDINAL
 WCH1     DATA   0           RIGHT JUSTIFIED FIRST CHANNEL
 WEQIP    DATA   0           RIGHT JUSTIFIED EQUIPMENT NUMBER 
 WUNIT    DATA   0           RIGHT JUSTIFIED UNIT NUMBER
 WDEVIC   DATA   0           RIGHT JUSTIFIED DEVICE CODE
 WATT     DATA   0           RIGHT JUSTIFIED FUNCTION ATTRIBUTES
 WDSN     DATA   0           RIGHT JUSTIFIED DISK PACK SERIAL NUMBER
 WMSID    DATA   0           RIGHT JUSTIFIED MSA DEVICE ID
 WMSTPH   DATA   0           RIGHT JUSTIFIED MST PHYSICAL ADDRESS 
 WMST     DATA   0           RIGHT JUSTIFIED MST DEVICE ADDRESS 
 WCSU     DATA   0           RIGHT JUSTIFIED CSU DEVICE ADDRESS 
  
 WRC2     DATA   0           CVL PARAMETER WORD FOR RESPONSE CODE 
 WEST2    DATA   0           RIGHT JUSTIFIED EST ORDINAL
 WCH2     DATA   0           RIGHT JUSTIFIED CHANNEL
 WEQIP2   DATA   0           RIGHT JUSTIFIED EQUIPMENT NUMBER 
 WUNIT2   DATA   0           RIGHT JUSTIFIED UNIT NUMBER
 WDEVIC2  DATA   0           RIGHT JUSTIFIED DEVICE CODE
 WATT2    DATA   0           RIGHT JUSTIFIED FUNCTION ATTRIBUTES
 WDSN2    DATA   0           RIGHT JUSTIFIED DISK PACK SERIAL NUMBER
 WMSID2   DATA   0           RIGHT JUSTIFIED MSA DEVICE ID
 WMSTPH2  DATA   0           RIGHT JUSTIFIED MST PHYSICAL ADDRESS 
 WMST2    DATA   0           RIGHT JUSTIFIED MST DEVICE ADDRESS 
 WCSU2    DATA   0           RIGHT JUSTIFIED CSU DEVICE ADDRESS 
 MTRA     DATA   0           LAST PPU FUNCTION
 MTRIN    DATA   0           TIME PPU CALLED
 MTRCUR   DATA   0           CURRENT TIME 
 MTRLST   DATA   0           LAST DISPLAY UPDATE TIME 
 PPUDIS   EQU    5           UPDATE DISPLAY EVERY 4 PASS
 STPMSG   DATA   10H STOPPED
 PPUD     DATA   0           LAST DISPLAY TYPE IS STORED HERE 
          IFEQ   NOS,1
          ENTRY  SSJ= 
          ENTRY  CVL= 
 OPL      XTEXT  COMCMAC
 OPL      XTEXT  COMCCVL
          IFEQ   NOS+NOS4+NOS5,1,1
 OPL      XTEXT  COMSSSD
          QUAL   SSJ                                                     MAL0376
 OPL      XTEXT  COMSSSJ
          QUAL   *                                                       MAL0376
 SSJL     EQU    /SSJ/SSJL                                               MAL0376
 SSJ=     BSS    0          SSJ= PARAMETER BLOCK
          IFEQ   NOS+NOS4+NOS5,2,1
          VFD    12/0,24/77777777B,12/30B,12/MXPS                        MAL017G
          IFEQ   NOS+NOS4+NOS5,1,1
          VFD    12/0,24/77777777B,12/0,12/IRSI 
          CON    0
          BSSZ   SSJL       PAD SSJ= PARAMETER BLOCK
          BSS    1
          ENDIF 
          EJECT 
 MALET    TITLE  MALET - MALET MONITOR
**        MALET - MALET MOINTER.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         MOINTERS THE RUNNING OF MALET THRU A TERMINAL, FROM INPUT 
*         OR K/L DISPLAY. CHECKS THE DROP FLAG IF SET MALET RUN IS
*         TERMINATED. 
* 
*         ENTRY  INITIAL ENTRY IS MADE TO MALET.
* 
*         EXIT - FDROP - SET TO NON-ZERO. 
* 
*         ROUTINES CALLED -  MTRDIR  - MOINTER INPUT DIRECTIVES.
*                            MTRPPU  - MOINTER PPU DIRECTIVES.
*                            BINCPY  - COPY BINARY FILE TO RANDOM FILE. 
*                            INITIAL - INITIALIZATION.
* 
*         DATA AREAS USED -  FDROP - DROP FLAG READ ONLY. 
* 
*         USES   A- 1.
*                X- 1.
*                B- NONE. 
* 
*         MESSAGES   NONE.
  
**        STEP -01- CALL INITIAL TO CRACK CONTROL CARD ETC. THEN CALL 
*                   BINCPY TO COPY SEQUENTIAL BINARY FILE TO THE RANDOM 
*                   FILE THEN STEP 2. 
* 
 MALET    SX1    MALA 
          RJ     LOADOVL           LOAD INITIALIZATION OVERLAY
          IFEQ   NOSBE+NOSBE3+NOS+NOS4+NOS5,1,1 
          REPRIEVE MALRPV,SETUP,RPVMSK
          IFEQ   NOSBE+NOSBE3,2,1 
          RECOVR MAL1A,,0 
          RJ     INITIAL           INITIALIZE 
          IFEQ   NOS+NOS4+NOS5,2
          SA1    FTERM
          ZR     X1,MAL1D    IF TERMINAL FLAG NOT SET 
          DISTC  ON,FTINT 
          ENDIF 
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          SA1    KCOR1
          BX6    X1 
          SA6    AA-8        SET FIRST DISPLAY LINE FOR 721 
          CSTATUS  F721      CONSOLE STATUS 
          SA1    F721 
          MX6    12 
          BX6    X6*X1       CLEAR ALL BUT TYPE 
          SA6    F721 
          NZ     X6,MAL1D    A 721 LEAVE THE DISPLAY COORDINATES AS IS
          SA1    KCOR2
          BX6    X1 
          SA6    AA-8        SET LINE 1 FOR CC545 
          SA1    KCOR23 
          BX6    X1 
          SA6    KCOR51      SET LINE 23 FOR CC545
          SA1    KCOR22 
          BX6    X1 
          SA6    KCOR50      SET LINE 22 FOR CC545
          SA1    AA-1 
          MX5    12 
          LX5    36 
          SB4    7
          SB5    -10
          SB3    20 
 MAL1DA   BX2    -X5*X1      SAVE ALL BUT Y COORD 
          BX1    X5*X1
          AX1    24 
          SX1    X1+B5       SPREAD THE COORDINATES 
          LX1    24 
          BX6    X2+X1
          SA6    A1 
          SA1    A1+B4       GET NEXT WORD
          SB5    B5-5 
          SB3    B3-1 
          NE     B3,MAL1DA
          ENDIF 
 MAL1D    RJ     BINCPY      COPY BINARY FILE TO RANDOM FILE
          SX1    DIRX 
          RJ     LOADOVL           LOAD COMMAND OVERLAY 
          SB3    DMALET 
          RJ     UPDIS             PUT UP MALET DISPLAY 
  
**        STEP -02- CHECK DROP FLAG IF SET THEN STEP 5, ELSE STEP 3.
* 
 MAL1     SA1    FDROP
          NZ     X1,MAL2     IF DROP FLAG SET 
          RECALL
  
**        STEP -03- MOINTER FOR USER COMMANDS.
          SA1    FTINT       TERMINAL INTERRUPT SET 
          NZ     X1,TERMINT  GO PROCESS TERMINAL INTERRUPT
* 
          RJ     MTRDIR      MOINTER USER FOR COMMANDS
  
**        STEP -04- TEST RUNNING FLAG IF NOT RUNNING LOOP TO STEP 1,
*                   ELSE MOINTER FOR PPU FUNCTIONS THEN STEP 1. 
* 
          SA1    FRUN 
          ZR     X1,MAL1     IF MODULE NOT RUNNING
          RJ     MTRPPU      MOINTER PPU FOR COMMANDS 
          EQ     MAL1 
  
          IFEQ   NOSBE+NOSBE3+NOS+NOS4+NOS5,1 
**        THE FOLLOWING CODE HOLDS THE BUFFER AND EQUATES FOR REPRIEVE
*         PROCESSING IN MALET. THEY MUST REMAIN CONTIGUOUS OR REPRIEVE
*         ERROR PROCESSING WILL NOT BE CORRECT. 
* 
 RPVMSK   EQU    232B        MASK FOR REPRIEVE PROCESSING 
  
 MALRPV   BSSZ   0
          VFD    36/0,12/31B,2/0,9/1,1/0
          VFD    30/0,30/MAL1A
          VFD    60/0 
          VFD    25/RPVMSK,35/0 
          BSSZ   25B
          ENDIF 
  
  
          IFEQ   NOS+NOS4+NOS5,2
 MAL1A    SA1    B0 
          MX5    6
          LX1    59-29
          BX6    X5*X1             EXTRACT ERROR FLAG 
          LX6    6
          SA6    MALB 
          ENDIF 
          IFEQ   NOSBE+NOSBE3,2 
 MAL1A    DATA   0                 RJ ENTRY 
          SA2    A1+B1
          SX6    B1 
          SA6    X2                SET END RUN FLAG 
          SA1    X1 
          SX6    X1                EXTRACT ERROR CODE 
          SA6    MALB 
          AX1    36 
          SX1    X1 
          NZ     X1,MAL1B 
          ENDIF 
          IFEQ   NOSBE+NOSBE3+NOS+NOS4+NOS5,1,1 
 MAL1A    EQ     MAL1EA 
          SA1    B0 
          MX5    18 
          LX1    59-47
          BX1    X5*X1
          LX1    18 
 MAL1B    RJ     CVTDIS 
          SA7    ERMSGD 
          SA1    ERMSG
          BX6    X1 
          SA6    CLINE       STORE FIRST WORD OF ERROR MESSAGE
          SA1    A1+B1
          BX6    X1 
          SA6    A6+B1       STORE SECOND WORD OF MESSAGE 
          SA1    A1+B1
          BX6    X1 
          SA6    A6+B1
          SB1    CLINE+1
          SB2    A7 
          SB3    30          BITS TO SKIP 
          SB4    36          BITS TO STORE
          SB5    B0          BITS TO SKIP ON NEXT STORE 
          SB6    B0          BYTES TO STORE 
          RJ     SBYTE       STORE P COUNTER INTO MESSAGE 
          SA1    MALB              GET ERROR CODE 
          RJ     CVTDIS      CONVERT TO DISPLAY CODE
          SA7    ERMSGD 
          SB1    CLINE+1     ADDRESS TO STORE 
          SB2    A7          ADDRESS OF DATA
          SB3    B0          BITS TO SKIP ON STORE
          SB4    12          BITS TO STORE
          SB5    B0          BITS TO SKIP ON NEXT STORE 
          SB6    B0          BYTES TO STORE 
          RJ     SBYTE       STORE ERROR FLAG 
          SX7    1R.
          LX7    48 
          SA1    CLINE+2
          BX7    X7+X1       ADD PERIOD TO MESSAGE
          SA7    A1 
          MX6    0
          SA6    B0          CLEAR RA 
          MESSAGE CLINE,0,R 
          IFEQ   NOSBE+NOSBE3+NOS+NOS4+NOS5,1 
 MAL1EA   SA1    MALRPV+3 
          MX2    -12
          BX1    -X2*X1      ERROR CODE 
          SX3    X1-3 
          SB2    MSGE83 
          ZR     X3,MAL1EC   PP PROGRAM REQUESTED ABORT 
          SX3    X1-5 
          SB2    MSGE84 
          ZR     X3,MAL1EC   PP CALL ERROR
          SX3    X1-6 
          SB2    MSGE85 
          ZR     X3,MAL1EC   OPERATOR DROP
          SX3    X1-7 
          SB2    MSGE86 
          ZR     X3,MAL1EB   OPERATOR KILL
          SX3    X1-10B 
          SB2    MSGE87 
          ZR     X3,MAL1EB   OPERATOR RERUN 
          SX3    X1-12B 
          SB2    MSGE88 
          ZR     X3,MAL1EB   ECS PARITY ERROR 
          SX3    X1-15B 
          SB2    MSGE89 
          ZR     X3,MAL1EB   AUTO-RECALL ERROR
          SX3    X1-16B 
          SB2    MSGE90 
          ZR     X3,MAL1EB   HUNG IN AUTO-RECALL
          SX3    X1-20B 
          SB2    MSGE91 
          ZR     X3,MAL1EC   PP PROGRAM NOT IN LIBRARY
          SX3    X1-40B 
          SB2    MSGE92 
          NZ     X3,MAL1EA1  NO TERMINAL INTERRUPT
          SX6    B1 
          SA6    FTINT       SET TERMINAL INTERRUPT FLAG
          EQ     MAL1EC      POST TERMINAL INTERRUPT
  
 MAL1EA1  SB2    MSGE93 
 MAL1EB   RJ     POST        UNKNOWN REPRIEVE ERROR 
          EQ     MAL2        ABORT CANNOT CONTINUE WITH THIS ERROR
  
 MAL1EC   SA1    INPUT
          MX5    42 
          BX1    X5*X1       EXTRACT NAME IN FET
          SX6    B1 
          SA6    FSUSPI      SET SUSPEND READING INPUT
          SA6    FEOFI       TURN OFF READING THE ALTERNATE FILE
          BX6    X6+X1
          SA6    INPUT       CLEAR ERROR FLAGS IN FET 
          RJ     POST        POST ERROR MESSAGE 
          ENDIF 
          SA1    FTERM
          ZR     X1,MAL2     ABORT IF NOT TERMINAL MODE 
          SA1    FCMNE
          BX6    X1 
          SA6    FCMNEA      SET/CLEAR MNE ON GO/DROP 
          SA1    FCVL 
          ZR     X1,MAL1E    IF CEVAL FLAG NOT SET
          MX6    0
          SA6    WDEVIC      CLEAR DC FOR CEVAL ERROR 
          SA6    WDEVIC2
          SA6    FCVL        CLEAR CEVAL CALLED FLAG
 MAL1E    MX6    0
          SA6    FCMNE       CLEAR FLAG 
          SA1    FRUN 
          ZR     X1,MAL1C    IF MODULE STOPPED
          RJ     STOP 
          EQ     MAL1C
 TERMINT  MX6    0
          SA6    FTINT       CLEAR TERM INT FLAG
          SA6    FTSTP       CLEAR TERM STOP FLAG 
          SA1    FRUN 
          ZR     X1,TINT1    IF NOT RUNNING 
          RJ     STOP 
          MX6    0
          SA6    FRUN        CLEAR RUN FLAG SO MESSAGE WILL PRINT 
          SB2    MSGE92 
          RJ     POST        TERMINAL INTERRUPT 
          SX6    B1 
          SA6    FRUN        RESET RUN FLAG IF IT WAS CLEARED 
          EQ     MAL1        RETURN TO MONITOR
  
 TINT1    BSSZ   0
          IFEQ   NOS+NOS4+NOS5,2,2
          SB2    MSGE92 
          RJ     POST        TERMINAL INTERRUPT 
          EQ     MAL1        EXIT 
  
 MAL1C    SA1    INPUT
          MX5    42          CLEAR STATUS BITS
          BX1    X5*X1
          SA2    RDIA 
          BX6    X2-X1
          ZR     X6,MAL1CA   IF NAME = INPUT
          SB5    6
          SB4    B0 
 MAL1CC   SA1    INPUT+B4    MOVE THE ALTERNATE FILE FET
          BX6    X1 
          SA6    RDIC+B4
          SA1    INPUT1+B4   MOVE THE NEW FET TO INPUT
          BX6    X1 
          SA6    INPUT+B4 
          SB4    B4+B1
          LT     B4,B5,MAL1CC   IF SIX WORDS NOT MOVED
          SX1    B1 
          BX6    X2+X1
          SA6    INPUT       SET NAME = INPUT 
          SB5    65 
          SB4    B0 
 MAL1CD   SA1    BUFIN+B4    MOVE THE ALTERNATE FILE FET
          BX6    X1 
          SA6    RDID+B4
          MX6    0           CLEAR THE BUFFER 
          SA6    BUFIN+B4 
          SB4    B4+B1
          LT     B4,B5,MAL1CD   IF SIXTY FIVE WORDS NOT MOVED 
 MAL1CA   MX6    0
          SA6    FXREF       CLEAR GLOBAL CROSS REFERENCE FLAG
          IFEQ   NOS+NOS4+NOS5+NOS6,1 
          TSTATUS FTSTAT     GET TERMINAL STATUS
          SA1    FTSTAT 
          MX5    48          SET MASK 
          BX2    -X5*X1 
          ZR     X2,MAL2     IF TERMINAL NOT CONNECTED DROP MALET 
          ENDIF 
          IFEQ   NOS+NOS4+NOS5,2,2
          SB2    CLINE       PRINT MESSAGE
          RJ     PRINT
          IFEQ   NOS+NOS4+NOS5,2,1
          EREXIT MAL1A
          IFEQ   NOSBE+NOSBE3+NOS+NOS4+NOS5,1 
          MX6    0
          SA6    MALRPV+3    CLEAR ERROR CODE 
          SA6    MALRPV+4    CLEAR INTERRUPT PENDING
          SA6    MALRPV+5    CLEAR RA+1 PENDING 
          SA6    MALRPV+6    CLEAR TERMINAL INTERRUPT 
          SA6    MALRPV+7    CLEAR ERROR FLAG 
          SX6    MAL1 
          LX6    36 
          SA6    MALRPV+11B  SET P TO MALET MONITOR 
          REPRIEVE MALRPV,RESUME,RPVMSK 
          ENDIF 
          IFEQ   NOSBE+NOSBE3,2,1 
          RECOVR MAL1A
          EQ     MAL1        RETURN TO MONITOR
  
**        STEP -05- FLUSH OUTPUT BUFFER, CLOSE UNLOAD RANDOM FILE,
*                   AND END MALET RUN.
* 
          IFEQ   NOS+NOS4+NOS5+NOSBE+NOSBE3,1,2 
 MAL2     SX6    MAL3 
          SA6    MALRPV+1    SET REPRIEVE EXIT TO MAL3
          IFEQ   NOS+NOS4+NOS5,2,1
 MAL2     EREXIT MAL3                                                    MAL038G
          IFEQ   NOS,1
          WRITER OUTPUT,R                                                MAL038G
          SA1    FRFILE 
          ZR     X1,MAL3     IF NO WRITES DONE ON RANDOM FILE 
          SKIPEI RFILE,R
          WRITEW RFILE,INDEX,LINDEX    PUT RANDOM FILE INDEX ON RFILE 
          WRITER RFILE,R
          WRITEF RFILE,R
          ENDIF 
  
          IFEQ   NOSBE+NOSBE3,2,1 
 MAL2     RECOVR MAL3                                                    MAL038G
          IFEQ   NOSBE,1
          WRITER OUTPUT,,R                                               MAL038G
          CLOSE  RFILE,,RECALL         CLOSE REWIND RFILE 
          SA1    MALB 
          NZ     X1,MAL1A          IF IN REPRIEVE MODE
          ENDIF 
 MAL3     SA1    FCMNEA 
          NZ     X1,MAL31 
          SA1    WDEVIC 
          ZR     X1,MAL4     IF NO DEVICE ASSIGNED
 MAL31    SA1    WATT 
          SX6    100B                                                    MAL028G
          BX6    X6*X1                                                   MAL028G
          NZ     X6,MAL3A 
          SX6    10B         CVL CODE FOR RETURN DEVICE 
          BX6    X1+X6       OR IN RTN EQUIP
          SA6    A1 
          MX6    0
          SA6    WRC         CLEAR RESPONSE CODE
          CEVAL  WRC         CALL CVL TO RETURN DEVICE
 MAL3A    SA1    WDEVIC2                                                 MAL31C1
          ZR     X1,MAL4     IF SECOND DEVICE NOT PRESENT                MAL31C1
          SA1    WATT2                                                   MAL31C1
          SX6    100B        NOT IN EST BIT                              MAL31C1
          BX6    X1*X6                                                   MAL31C1
          NZ     X1,MAL4     IF NOT IN EST BIT SET                       MAL31C1
          SX6    10B                                                     MAL31C1
          BX6    X1+X6       SET RETURN DEVICE REQUEST                   MAL31C1
          SA6    A1                                                      MAL31C1
          MX6    0                                                       MAL31C1
          SA6    WRC2        CLEAR PREVIOUS RESPONSE CODE                MAL31C1
          CEVAL  WRC2        CALL CVL TO RETURN DEVICE                   MAL31C1
          IFEQ   NOS+NOS4+NOS5+NOSBE+NOSBE3,2,1 
 MAL4     ENDRUN
          IFEQ   NOS+NOS4+NOS5+NOSBE+NOSBE3,1 
 MAL4     SA1    MALRPV+7 
          ZR     MAL5        NO ERROR FLAG EXIT 
          SX6    MAL5 
          SA6    MALRPV+1    SET EXIT ADDRESS 
          SA6    MALRPV+11   ENSURE ADDRESS SET 
          REPRIEVE MALRPV,RESET,RPVMSK
 MAL5     ENDRUN
          ENDIF 
 ERMSG    DIS    ,* ERROR EF=00 P=000000.*
 ERMSGD   DATA   0
 TIMSG    DIS    ,* TERMINAL INTERRUPT* 
          DATA   0
*         LOAD INITIALIZATION OVERLAY 
 MALA     OVLTAB 7LMALET30,3,0
 MALB     DATA   0                 SAVE ABORT ERROR CODE
          EJECT 
 BANNER   TITLE  BANNER - PRINT PAGE BANNER 
**        BANNER - PRINT PAGE BANNER
* 
*         G. L. GOLDEN  78/03/29. 
* 
*         ENTRY  (CNTLINE) = CURRENT LINE NUMBER
* 
*         EXIT   (CNTLINE) = 3
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  FTERM, CNTLINE.
* 
*         USES   A - 1, 6.
*                X - 1, 6.
*                B - NONE.
* 
*         MESSAGES - NONE.
* 
  
**        STEP -01- GO TO STEP 2 IF BANNER HAS BEEN PRINTED AT LEAST
*                   ONCE.  OTHERWISE, PREPARE BANNER FOR TERMINAL AND 
*                   BATCH MODE AND PRINT AS REQUIRED. 
* 
  
 BANNER   DATA   0
          SA1    BANF 
          NZ     X1,BAN3     IF BANNER HAS BEEN PRINTED PREVIOUSLY
          SX6    B1 
          SA6    A1          SET BANNER FLAG
          SA1    FTERM
          ZR     X1,BAN1     IF NOT TERMINAL MODE 
          SA1    BANMSG      CREATE TERMINAL BANNER 
          MX6    6
          BX1    -X6*X1 
          SX6    1R 
          LX6    54 
          BX6    X6+X1
          SA6    CLINE
          SA1    A1+B1
          BX6    X1 
          SA6    A6+B1
          DATE   CLINE+2
          CLOCK  CLINE+3
          MX6    0
          SA6    CLINE+4
  
          IFEQ   NOS,1,2
          WRITEC TERMOUT,CLINE
          WRITER TERMOUT,R
  
          IFEQ   NOSBE,1,2
          WRITOUT TERMOUT 
          WRITER  TERMOUT,,R
  
          SA1    TERMOUT
          BX6    X1 
          SA1    OUTPUT 
          BX1    X1-X6
          AX1    18 
          ZR     X1,BANNER   IF NOT TWO OUTPUT FILES
 BAN1     SX1    LPHI-4 
          NZ     X1,BAN2     IF 6LPI
          SA1    BANI 
          BX6    X1 
          SA6    BANH        SET TO PRINT AT 8LPI 
  
          IFEQ   NOSBE,1
 BAN2     SX6    BANG 
          SX1    BANG+1 
          LX6    30 
          BX6    X6+X1
          SA6    OUTPUT+5    SET POINTER FOR CLEAR AUTO EJECT LINE
          WRITOUT OUTPUT
          SX6    BANH 
          SX1    BANH+1 
          LX6    30 
          BX6    X6+X1
          SA6    OUTPUT+5    SET POINTER FOR SELECT 6/8 LPI 
          WRITOUT OUTPUT
          ENDIF 
  
          IFEQ   NOS,1
 BAN2     WRITEC OUTPUT,BANG   CLEAR AUTO EJECT 
          WRITEC OUTPUT,BANH   SELECT 6/8 LPI 
          ENDIF 
  
**        STEP -02- RETURN IF TERMINAL MODE AND NO ALTERNATE OUTPUT 
*                   FILE.  OTHERWISE, STEP 3. 
* 
 BAN3     SA1    FTERM
          ZR     X1,BAN4      IF NOT TERMINAL MODE
          SA1    TERMOUT
          BX6    X1 
          SA1    OUTPUT 
          BX1    X1-X6
          AX1    18 
          ZR     X1,BANNER    EXIT IF NOT TWO OUTPUT FILES
 BAN4     SX6    B2 
          SA6    BAND        SAVE (B2) OVER BANNER
  
**        STEP -03- GET TIME AND DATE AND STORE IN BANNER.
* 
          DATE   BANA        STORE DATE INTO BANNER 
          CLOCK  BANB        STORE CLOCK INTO BANNER
  
**        STEP -04- PRINT BANNER WITH PAGE EJECT THEN TWO BLANK 
*                   LINES, THEN RESET CNTLINE TO 3, THEN RETURN.
* 
  
          IFEQ   NOSBE,1
          SX6    BANMSG 
          LX6    30 
          SX1    BANMSGL
          BX6    X1+X6
          SA6    OUTPUT+5 
          WRITOUT OUTPUT
          SX6    BANC 
          SX1    BANC+1 
          LX6    30 
          BX6    X6+X1
          SA6    OUTPUT+5    SET POINTERS FOR BLANK LINE
          WRITOUT OUTPUT
          WRITOUT OUTPUT
          SX6    CLINE
          SX1    CLINE+13 
          LX6    30 
          BX6    X1+X6
          SA6    OUTPUT+5    RESTORE OUTPUT WORKING STORAGE AREA
          ENDIF 
  
          IFEQ   NOS,1
          WRITEC OUTPUT,BANMSG
          WRITEC OUTPUT,BANC OUTPUT BLANK LINE
          WRITEC OUTPUT,BANC OUTPUT BLANK LINE
          ENDIF 
  
          SX6    3
          SA6    CNTLINE      RESET CURRENT LINE NUMBER 
          SA1    BAND 
          SB2    X1 
          EQ     BANNER 
  
 BANMSG   DATA   10H1   MALET 
 BANVER   VFD    42/7L"VERS",18/3L
          DATA   40H MAINTENANCE APPLICATION LANGUAGE FOR EQ
          DATA   20HUIPMENT TESTING.
 BANA     DATA   10H 78/03/30.
 BANB     DATA   10H 08.30.00.
 BANC     DATA   0
 BANMSGL  EQU    *
 BAND     DATA   0           SAVE (B2) OVER BANNER
 BANF     DATA   0           BANNER POSTED PREVIOUSLY FLAG
 BANG     VFD    60/1LQ      CLEAR AUTO EJECT 
 BANH     VFD    60/1LS      SELECT 6 LINES PER INCH
 BANI     VFD    60/1LT      SELECT 8 LINES PER INCH
          EJECT 
 BLK      TITLE  BLK - BLANK FILL WORD. 
**        BLK - CONVERT ZEROES TO BLANKS IN A WORD. 
* 
*         G. R. MANSFIELD.   70/12/08.
*         S. R. MCPHERSON.   74/11/15.
*         G. L. GOLDEN.      76/12/08. ADAPTED TO MALET.
* 
*         BLK - CONVERTS ZERO TO BLANKS IN A WORD.
* 
*         ENTRY  (X1) = WORD LEFT JUSTIFIED, ZERO FILL. 
*                (B1) = 1.
* 
*         EXIT   (X6) = WORD SPACE FILLED.
*                (X7) = FINAL CHARACTER MASK. 
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  BLKA - CONSTANT USED FOR CONVERSION. 
* 
*         USES   A - 3. 
*                X - 3, 6, 7. 
*                B - NONE.
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- CONVERT LEFT JUSTIFIED WORD TO SPACE FILLED WORD
*                   THEN RETURN.
* 
 BLK      PS                 ENTRY/EXIT 
          SA3    BLKA 
          BX6    X3*X1       EXTRACT UPPER BIT FROM ALL CHARACTERS
          BX7    -X3*X1 
          IX6    X6+X3       ANY NON-ZERO CHARACTER PRODUCES CARRY
          BX6    X6+X7       MERGE UPPER BITS AND CARRIES 
          BX7    -X3*X6      ALL NON ZERO CHARACTERS = 40B
          SA3    A3+B1
          BX6    X7 
          LX7    -5          GENERATE SPACE MASK
          IX7    X6-X7
          BX7    X6+X7
          BX3    -X7*X3      SELECT SPACE CODES 
          IX6    X1+X3       MERGE SPACES 
          EQ     BLK
  
 BLKA     CON    37373737373737373737B
          CON    1H 
          EJECT 
 CHKSUM   TITLE  CHKSUM - CHECKSUM MODULE BUFFER. 
**        CHKSUM - FORMS CHECKSUM OF MODULE.
* 
*         G. L. GOLDEN.   76/12/08. 
* 
*         ENTRY      (B2)  =  0 STORE CHECKSUM. 
*                    (B2) NON 0 CHECK CHECKSUM. 
* 
*         EXIT       (B2)  =  0  IF NO ERRORS.
*                    (B2) NON 0  IF ERRORS. 
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  MODULE - MODULE BUFFER.
* 
*         USES   A - 1, 5, 7. 
*                X - 1, 2, 3, 5, 6, 7.
*                B - 2, 3.
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- FORM 60 BIT CHECKSUM OF MODULE BUFFER OF ALL WORDS
*                   EXCEPT CHECKSUM WORD, THEN STEP 2.
* 
 CHKSUM   DATA   0
          SA5    MODULE+5 
          MX7    0
          SA7    A5          CLEAR CHECKSUM WORD
          SB3    MODULE      (B3) = FWA OF MODULE 
          SA1    MODULE+3 
          MX7    -12
          BX1    -X7*X1 
          SB4    X1+MODULE   (B4) = LWA OF MODULE 
          SX2    B0 
 CHK1     SA1    B3          GET NEXT WORD TO BE CHECK SUMMED 
          BX2    X2-X1
          LX2    59-58
          SB3    B3+B1       INCREMENT INDEX ADDRESS
          LT     B3,B4,CHK1  IF NOT DONE WITH 60 BIT CHECK-SUM
  
**        STEP -02- PACK 60 BIT CHECKSUM TO 12 BITS, THEN STEP 3. 
* 
          MX3    -12
          BX1    -X3*X2      FORM CHECKSUM
          AX2    12 
          BX6    -X3*X2 
          IX1    X1+X6
          AX2    12 
          BX6    -X3*X2 
          IX1    X1+X6
          AX2    12 
          BX6    -X3*X2 
          IX1    X1+X6
          AX2    12 
          BX6    -X3*X2 
          IX1    X1+X6
          IX7    X1+X3
          BX6    -X3*X7 
  
**        STEP -03- IF B2 NON ZERO THEN STEP 4, ELSE STORE CHECKSUM 
*                   IN MODULE BUFFER WORD 5 BYTE 4 THEN STEP 5. 
* 
          NE     B2,B0,CHK2  IF COMPARE CHECKSUM WITH STORED CHECKSUM 
          MX3    48 
          BX5    X3*X5       CLEAR LOWER 12 BITS (X5) 
          BX6    -X3*X6      CLEAR UPPER 48 BITS (X6) 
          BX7    X6+X5       OR CHECKSUM INTO WORD
          SA7    A5          STORE CHECKSUM INTO MODULE BUFFER
          SB2    B0 
          EQ     CHK3 
  
**        STEP -04- COMPARE CHECKSUM IN X6 WITH CHECKSUM IN MODULE
*                   BUFFER WORD 5 BYTE 4 STORE DIFFERENCE IN B2.
*                   THEN STEP 5.
* 
 CHK2     BX7    X5          (X7) =  CHECKSUM WORD
          SA7    A5          STORE CHECKSUM WORD BACK INTO MODULE 
          MX3    -12
          BX5    -X3*X5      MASK CHECKSUM INTO X5 BITS 0-11
          BX6    -X3*X6      MASK CHECKSUM FORMED IN BITS 0-11
          BX2    X5-X6
          SB2    X2          MOVE DIFFERENCE INTO B2
  
**        STEP -05- RETURN. 
* 
 CHK3     EQ     CHKSUM        RETURN TO CALLER 
          EJECT 
 CRACK    TITLE  CRACK - CRACK CHARACTER STRING.
**        CRACK - CRACK CHARACTER STRING. 
* 
*         J. E. SIPPER. 76/12/08. 
* 
*         CRACK  A  CHARACTER  STRING  INTO  A  WORD STRING. THE
*         FOLLOWING  ARE  CONSIDERED  DELIMITERS,   TERMINATE  A
*         STRING AND ARE CONSIDERED SEPARATE DATA ITEMS.
* 
*                + - * / ( ) $ = ** 
* 
*         THE  FOLLOWING  ARE  CONSIDERED DELIMITERS FOR A STRING,
*         BUT ARE DISCARDED THEMSELVES. 
* 
*                 BLANK   COMMA    PERIOD 
* 
*         TWO CONSECITIVE BLANKS OR A ZERO BYTE TERMINATE  THE CRACK. 
*         CRACK  WILL  ALSO TERMINATE  AFTER 6 SOURCE WORDS HAVE BEEN 
*         CRACKED.
* 
*         DELIMITERS THAT ARE STORED  AS DATA  ITEMS  THEMSELVES  ARE 
*         RIGHT  JUSTIFIED  ZERO FILLED IN THE WORD STRING EXCEPT FOR 
*         THE + AND - WHICH ARE LEFT JUSTIFIED. ALL  OTHER  DELIMITER 
*         ITEMS ARE LEFT JUSTIFIED, ZERO FILLED.
* 
*         A DOUBLE * BRACKETS A DISPLAY CODE LITERAL.  CHARACTERS 
*         FOLLOWING ** ARE PACKED INTO CRKBUF AS FOUND UNTIL A
*         SECOND ** IS DETECTED.
* 
*         ENTRY  B2 = ADDRESS OF DATA TO CRACK. 
*                B3 = LEFT SHIFT COUNT REQUIRED TO POSITION 1ST 
*                     CHARACTER TO BIT POSITION 54-59 OF THE WORD.
*                B4 = NUMBER OF WORDS TO CRACK. 
* 
*         EXIT   WORD STRING IS IN CRKBUF WITH A ZERO  WORD  AT  END OF 
*                STRING.
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  CRKBUF - STORAGE FOR CRACKED DATA. 
* 
*         USES   A - 1, 4, 5, 6, 7. 
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 2, 3, 5, 6, 7. 
* 
*         MESSAGES   NONE.
* 
* 
  
**        THE FOLLOWING REGISTERS ARE USED THROUGHOUT  CRACK  FOR THE 
*         FOLLOWING FUNCTIONS;
*                                        X4 = CHARACTER MASK. 
*           B5 = BLANK COUNTER.          X5 = CHARACTER CTR.(SHIFT CNT) 
*           B6 = COMMA/PERIOD COUNTER.   X6 = ACCUMULATED DATA WORD.
*           B7 = INDEX TO CRKBUF.        X7 = DATA MODE FLAG. 
* 
  
**      STEP 01- CLEAR/SET COUNTERS, THEN STEP 2. 
* 
 CRACK    DATA   0           ENTRY/EXIT 
          SX7    B2+6 
          SA7    CRKA        SAVE TERMINATING SOURCE ADDRESS
          SB5    B0          CLEAR BLANK COUNTER
          SB6    B0          CLEAR COMMA/PERIOD COUNTER 
          SB7    CRKBUF      SET INDEX TO CRKBUF
          SX4    77B         SET CHARACTER MASK 
          SX5    54          SET CHARACTER SHIFT COUNTER
          MX6    0           CLEAR DATA WORD
          MX7    0           CLEAR DATA MODE FLAG 
          SA1    B2          GET FIRST DATA WORD
  
*         STEP 02- GET A CHARACTER.  IF LITERAL MODE GO TO STEP 11. 
*                  IF CHARACTER IS * GO TO STEP 13. 
*                  IF LAST CHARACTER WAS *, STORE * SEPARATER,
*                  THEN GO TO STEP 6 IF CHARACTER IS SPECIAL TERMINATOR,
*                TO STEP 9 IF A BLANK TERMINATOR, TO STEP 3 IF A  COMMA 
*                OR PERIOD, OR TO STEP 5 IF DATA. 
* 
 CRK1     SB3    B3+6 
          SX3    B3-66
          NZ     X3,CRK2     IF ALL CHARACTERS NOT USED FROM THIS WORD
          SB3    6           RESET SHIFT COUNT FOR FIRST CHARACTER
          SB2    B2+B1       INCREMENT POINTER TO DATA
          SA1    B2          GET NEXT DATA WORD 
          SA3    CRKA 
          SX2    B2 
          BX3    X3-X2
          NZ     X3,CRK2     IF TERMINAL ADDRESS HAS NOT BEEN REACHED 
          SB4    B1          SET TERMINAL COUNT 
          EQ     CRK3        STORE CURRENT WORD AND EXIT
  
 CRK2     LX2    B3,X1
          BX2    X2*X4       GET A CHARACTER
          SX3    X2-1R* 
          NG     X7,CRK13    IF LITERAL MODE
          ZR     X3,CRK16    IF CHARACTER IS *
          PL     B5,CRK2A    IF LAST CHARACTER WAS NOT *
          SB5    B0          CLEAR * FLAG 
          SX6    1R*
          SA6    B7          STORE * TERMINATOR 
          SB7    B7+B1       BUMP POINTER 
 CRK2A    ZR     X2,CRK11    TREAT ZERO AS A BLANK
          SX3    X2-1R+ 
          NG     X3,CRK10    IF NOT A TERMINATOR
          SX3    X2-1R
          ZR     X3,CRK11    IF A BLANK 
          NG     X3,CRK6     IF A SPECIAL TERMINATOR
          SX3    X2-76B 
          ZR     X3,CRK1     PREFACE LOWER CASE ASCII CHARACTER 
          SX3    X2-1R.-1 
          PL     X3,CRK10    IF NOT A TERMINATOR
  
**      STEP 03- BUMP COMMA/PERIOD COUNTER, AND CLEAR BLANK COUNTER.
*                THEN STEP 10 IF NOT TWO OR MORE IN A ROW, ELSE STEP 4. 
* 
          SB6    B6+B1       BUMP COMMA/PERIOD COUNTER
          SB5    B0          CLEAR BLANK COUNTER
          EQ     B6,B1,CRK12 IF NOT TWO OR MORE IN A ROW
          SX6    1R0         DATA = 0 
          LX6    59-5 
  
**      STEP 04- STORE DATA WORD AND BUMP POINTERS. CLEAR DATA MODE AND 
*                THE DATA WORD. 
* 
 CRK3     MX7    0           CLEAR DATA MODE FLAG 
 CRK3A    ZR     X6,CRK3B          IF NO DAT TO STORE 
          SA6    B7                STORE DATA 
          SB7    B7+B1       BUMP POINTER TO CRKBUF 
          MX6    0           CLEAR DATA WORD
 CRK3B    SX5    54                RESET SHIFT COUNT
  
**      STEP 05- DETERMINE IF  ALL WORDS REQUESTED HAVE BEEN CRACKED OR 
*                IF CRKBUF IS FULL. IF NEITHER, THEN STEP 2 TO GET NEXT 
*                CHARACTER. 
* 
 CRK4     SB4    B4-B1
          LE     B4,B0,CRK5  IF ALL DONE
          SX3    B7-CRKBUF-LCRKBUF
          NG     X3,CRK1     IF BUFFER IS NOT FULL
  
**      STEP 06- ZERO NEXT WORD IN CRKBUF AND EXIT. 
* 
 CRK5     MX6    0
          SA6    B7 
          EQ     CRACK
  
**      STEP 07- A SPECIAL TERMINATOR HAS BEEN DETECTED.  STORE CURRENT 
*                WORD IF DATA MODE AND BUMP POINTERS. 
* 
 CRK6     ZR     X7,CRK7     IF NOT DATA MODE 
          SA6    B7 
          SB7    B7+B1       INCREMENT CRKBUF POINTER 
          MX6    0           CLEAR DATA WORD
          SX5    54          RESET SHIFT COUNT
          SB4    B4-B1       DECREMENT WORDS TO CRACK 
  
 CRK7     SX3    X2-1R+ 
          ZR     X3,CRK8     IF + 
          SX3    X2-1R- 
          NZ     X3,CRK9     IF NOT - 
 CRK8     LX2    59-5        POSITION + OR - TO UPPER BYTE
 CRK9     BX6    X6+X2
          SA6    B7          STORE CHARACTER
          SB7    B7+B1       ADVANCE P
          MX7    0           CLEAR DATA MODE
          SB5    B0          CLEAR BLANK CTR
          SB6    B0          CLEAR COMMA/PERIOD CTR 
          MX6    0           CLEAR DATA WORD
          EQ     CRK4        TO DETERMINE IF ALL WORDS ARE DONE 
  
**      STEP 08- A NORMAL CHARACTER HAS BEEN  FOUND.  CLEAR  BLANK  AND 
*                COMMA/PERIOD CTR,  SET DATA MODE, AND ADD CHARACTER TO 
*                DATA STRING. IF THE DATA WORD IS NOT FULL, THEN STEP 2 
*                TO GET NEXT CHARACTER. OTHERWISE, STEP 4 TO STORE DATA 
*                ITEM.
* 
 CRK10    SX7    B1          SET DATA MODE
 CRK10A   SB5    B0          CLEAR BLANK COUNTER
          SB6    X5          CHARACTER SHIFT COUNT
          LX2    B6,X2       POSITION CHARACTER 
          SB6    B0          CLEAR COMMA/PERIOD CTR 
          BX6    X6+X2       ADD CHARACTER TO STRING
          SX5    X5-6        DECREMENT CHARACTER COUNTER
          PL     X5,CRK1     IF NOT FULL WORD 
          EQ     CRK3A             TO STORE DATA WORD 
  
**      STEP 09- A BLANK HAS BEEN DETECTED.  BUMP THE BLANK CTR.
* 
 CRK11    SB5    B5+B1
  
**      STEP 10- IF DATA MODE THEN STEP 4 TO STORE DATA WORD.  IF NOT 
*                STEP 5 IF THREE BLANKS IN A ROW. OTHERWISE, STEP 2 
*                TO GET NEXT CHARACTER. 
* 
 CRK12    NZ     X7,CRK3     IF DATA MODE 
          SX3    B5-2 
          NG     X3,CRK1     IF NOT TWO OR MORE BLANKS
          EQ     CRK5        TO ZERO FILL LAST WORD AND EXIT
  
**        STEP 11- IF CURRENT CHARACTER IS * GO TO STEP 12.  IF LAST
*                  CHARACTER WAS *, ADD * TO LITERAL.  ADD CURRENT
*                  CHARACTER TO LITERAL THEN STEP 2.
  
 CRK13    ZR     X3,CRK14    IF CHARACTER IS *
          PL     B5,CRK10A   IF LAST CHARACTER WAS NOT *
          SB5    X5          CHARACTER SHIFT COUNT
          SX3    1R*
          LX3    B5,X3
          BX6    X6+X3       ADD * TO STRING
          SX5    X5-6        DECREMENT SHIFT COUNT
          PL     X5,CRK10A   IF NOT FULL WORD 
          SX5    54          RESET SHIFT COUNT
          SA6    B7          STORE DATA 
          SB7    B7+B1       BUMP POINTER TO CRKBUF 
          MX6    0           CLEAR DATA WORD
          SB4    B4-B1
          LE     B4,B0,CRK5  IF ALL DONE
          SX3    B7-CRKBUF-LCRKBUF
          PL     X3,CRK5     IF BUFFER FULL 
          EQ     CRK10A      GO ADD CURRENT CHARACTER TO LITERAL
  
**        STEP 12- IF LAST CHARACTER WAS NOT *, SET * FLAG THEN 
*                  STEP 2.  OTHERWISE STORE THE WORD, CLEAR LITERAL 
*                  MODE, STORE A ** SEPARATOR THEN STEP 2.
  
 CRK14    PL     B5,CRK15    IF LAST CHARACTER NOT *
          SB5    B0                CLEAR * FLAG 
          ZR     X6,CRK14A
          SA6    B7          STORE CURRENT WORD 
          SB7    B7+B1       BUMP CRKBUF POINTER
 CRK14A   SB4    B4-B1
          LE     B4,B0,CRK5  IF ALL DONE
          SX3    B7-CRKBUF-LCRKBUF
          PL     X3,CRK5     IF BUFFER FULL 
          SX6    2R** 
          EQ     CRK3        GO STORE ** SEPARATER
  
 CRK15    SB5    -B1         SET * FLAG 
          EQ     CRK1        GO GET NEXT CHARACTER
  
**        STEP 13- IF LAST CHARACTER WAS *, STORE ** SEPARATER, SET 
*                  LITERAL MODE AND GO TO STEP 2.  OTHERWISE, 
*                  SET THE * FLAG, STORE THE CURRENT WORD, AND
*                  GO TO STEP 2.
  
 CRK16    PL     B5,CRK17    IF LAST CHARACTER WAS NOT *
          MX7    59          SET LITERAL MODE 
          SX6    2R** 
          SB5    B0          CLEAR * FLAG 
          EQ     CRK3A       GO STORE ** TERMINATOR 
  
 CRK17    SB5    -B1         SET * FLAG 
          ZR     X6,CRK1           IF EMPTY DATA WORD 
          EQ     CRK3        GO STORE CURRENT WORD
 CRKBUF   BSSZ   60          CRACK BUFFER FOR WORD STRING 
 CRKA     BSSZ   1           BUFFER FOR TERMINATING ADDRESS 
 LCRKBUF  EQU    *-CRKBUF    LENGTH OF CRACK BUFFER 
          EJECT 
 CVTDEC   TITLE  CVTDEC - CONVERT INTEGER TO DISPLAY CODE DECIMAL.
**        CVTDEC - CONVERT WORD TO DECIMAL DISPLAY CODE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         CVTDEC  CONVERTS  A  WORD TO DECIMAL DISPLAY CODE. CONVERTS 
*         ONLY BOTTOM 4 OCTAL DIGITS.  MAXIMUM VALUE 7777B. 
* 
*         ENTRY      (X1) = WORD TO CONVERT.
* 
*         EXIT       (X7) = CONVERTED DISPLAY CODE DIGITS.
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  (DECA-DECE) CONSTANTS USED IN CONVERSION.
* 
*         USES   A - 2. 
*                X - 1, 2, 3, 5, 6, 7.
*                B - NONE.
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- INITIALIZE FINAL CONVERTED VALUE TO ZERO. MASK
*                   VALUE WITH 7777B MAXIMUM VALUE FOR FINAL ANSWER IS
*                   4095 DECIMAL. 
* 
 CVTDEC   DATA   0           ENTRY/EXIT 
          MX5    -12
          BX1    -X5*X1      CLEAR BITS  12-60
          MX7    0
          SA2    DECA-1 
  
**        STEP -02- LOOP UNTIL ALL DIGITS CONVERTED THEN RETURN WITH
*                   DISPLAY CODE CONVERTED VALUE. 
* 
 DEC1     SA2    A2+B1
          ZR     X2,CVTDEC   IF DONE ZERO WORD TO SUBTRACT
          SX6    1R0
 DEC2     IX3    X1-X2
          NG     X3,DEC3     IF DONE WITH THIS SUBTRACT 
          BX1    X3 
          SX6    X6+B1
          EQ     DEC2 
  
 DEC3     LX7    59-53
          BX7    X7+X6       COMBINE VALUE CONVERTED WITH ANY PREVIOUS
          EQ     DEC1        GO TO NEXT CONSTANT
  
*         DECIMAL CONSTANTS USED IN CONVERSION. 
  
 DECA     DATA   1000 
 DECB     DATA   100
 DECC     DATA   10 
 DECD     DATA   1
 DECE     DATA   0
          EJECT 
 CVTDIS   TITLE  CVTDIS - CONVERT BINARY TO OCTAL DISPLAY CODE. 
**        CVTDIS - CONVERT BINARY TO OCTAL DISPLAY CODE.
*         C. R. WILLIS. UNIVERSITY OF MINNESOTA.
*         G. L. GOLDEN. 76/12/08. ADAPTED FOR USE BY MALET. 
* 
*         CVTDIS CONVERTS A WORD TO OCTAL DISPLAY  CODE  BY  AN IN-LINE 
*         SEQUENCE OF SHIFTS AND MASKS. 
* 
*         ENTRY (X1)   = WORD TO CONVERT. 
*               (B1)   = 1. 
* 
*         EXIT  (X6,X7) = CONVERSION. 
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  NONE.
* 
*         USES   A - 2, 3, 4, 5 
*                X - 0, 1, 2, 3, 4, 5, 6, 7.
*                B - NONE.
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- CONVERT INTERGER TO OCTAL DISPLAY CODE WITH IN-LINE 
*                   SEQUENCE OF SHIFTS AND MASKS THEN RETURN. 
* 
 CVTDIS   DATA   0           ENTRY/EXIT 
  
*         (X1)   =           ABCDE FGHIJ KLMNO PQRST
  
          SA2    CVTA        7.... 7.... 7.... 7....
          BX7    X2*X1       A.... F.... K.... P....
          LX1    3           BCDEF GHIJK LMNOP QRSTA
          BX6    X2*X1       B.... G.... L.... Q....
          LX1    3           CDEFG HIJKL MNOPQ RSTAB
          LX7    27          .K... .P... .A... .F...
          BX0    X2*X1       C.... H.... M.... R....
          LX6    21          ...L. ...Q. ...B. ...G.
          LX1    3           DEFGH IJKLM NOPQR STABC
          IX7    X6+X7       .K.L. .P.Q. .A.B. .F.G.
          BX5    X2*X1       D.... I.... N.... S....
          LX1    3           EFGHI JKLMN OPQRS TABCD
          LX0    15          H.... M.... R.... C....
          BX6    X2*X1       E.... J.... O.... T....
          IX7    X7+X0       HK.L. MP.Q. RA.B. CF.G.
          LX5    9           ..I.. ..N.. ..S.. ..D..
          LX6    3           ....J ....O ....T ....E
          IX7    X7+X6       HK.LJ MP.QO RA.BT CF.GE
          SA4    A2+B1       .7.7. 7.7.7 ..... .....
          SA3    A4+B1       ..... .7.7. 7.7.7 .....
          BX7    X7+X5       HKILJ MPNQO RASBT CFDGE
          BX2    X7*X4       .K.L. M.N.O ..... .....
          SA5    A3+B1       00000 00000 00000 00000
          BX1    X7*X3       ..... .P.Q. R.S.T .....
          LX7    30          RASBT CFDGE HKILJ MPNQO
          IX2    X5+X2       .K.L. M.N.O 00000 00000
          BX0    X7*X4       .A.B. C.D.E ..... .....
          IX0    X0+X5       .A.B. C.D.E 00000 00000
          LX1    45          ..... ..... .P.Q. R.S.T
          BX3    X7*X3       ..... .F.G. H.I.J .....
          IX7    X1+X2       .K.L. M.N.O .P.Q. R.S.T
          LX3    45          ..... ..... .F.G. H.I.J
          IX6    X0+X3       .A.B. C.D.E .F.G. H.I.J
          EQ     CVTDIS      RETURN 
  
 CVTA     CON    70000700007000070000B
          CON    07070707070000000000B
          CON    00000070707070700000B
          CON    10H0000000000
          EJECT 
 CVTHXB   TITLE  CVTHXB - HEXADECIMAL DISPLAY CODE TO BINARY CONVERSION.
**        CVTHXB - HEXADECIMAL DISPLAY CODE TO BINARY CONVERSION. 
* 
*         P. D. FARRELL      77/02/16.
*         G. L. GOLDEN       80/03/21.  ADAPTED TO MALET USE
* 
*         ENTRY  - (X5) = WORD TO BE CONVERTED. 
* 
*         EXIT   - (X6) = CONVERTED HEXADECIMAL DIGITS. 
*                  (X4) = NON-ZERO IF ERROR DETECTED
* 
*         USES   X - 2, 3, 4, 5, 6. 
*                B - 3, 4, 5. 
* 
*         CALLS  - NONE.
* 
 CVTHXB   DATA   0
          SB3    -1RG        (B3) = -1RG
          MX4    -6          (X4) = DIGIT MASK
          BX6    X6-X6       CLEAR ASSEMBLY 
          SB4    -1R0        (B4) = -1R0
          SB5    -1RH        (B5) = -1RH
  
 HXB1     ZR     X5,CVTHXB   IF ZERO WORD, RETURN ERROR 
          LX5    6           EXTRACT UPPER DIGIT
          BX2    -X4*X5      (X2) = DISPLAY CODE DIGIT
          SX3    X2+B5
          BX5    X4*X5       CLEAR DIGIT
          NZ     X3,HXB2     IF NOT RADIX H 
          SX4    B1 
          EQ     CVTHXB      RETURN WE HAD ERROR
  
*         CONVERT DIGITS TO TRAILING SPACE. 
  
 HXB2     SX3    X2+B5       CHECK DIGIT
          LX5    6
          ZR     X3,HXB4     IF TRAILING RADIX H
          SX3    X2+B3
          NG     X3,HXB3     IF A-F 
          SX3    X2+B4
          NG     X3,CVTHXB   IF G-0, RETURN ERROR 
          SX3    X2-1R9-1 
          PL     X3,CVTHXB   IF .GT. 9, RETURN ERROR
          SX2    X2-1R0+1RA-0#A  BIAS FOR 0-9 CONVERSION  777733B 
 HXB3     SX2    X2-1RA+0#A  CONVERT DIGIT 000011B
          LX6    4           ADD TO ASSEMBLY
          BX6    X6+X2
          BX2    -X4*X5      EXTRACT NEXT DIGIT 
          BX5    X4*X5       CLEAR DIGIT
          NZ     X2,HXB2     IF NOT END OF WORD 
          EQ     CVTHXB      NO RADIX H, RETURN ERROR 
  
 HXB4     NZ     X5,CVTHXB   MORE DATA AFTER RADIX H, RETURN ERROR
          BX4    X4-X4       RETURN NO ERROR
          EQ     CVTHXB 
          EJECT 
 CVTINT   TITLE  CVTINT - CONVERT DISPLAY CODE INTEGER TO BINARY. 
**        CVTINT - CONVERT DISPLAY CODE INTEGER TO BINARY.
* 
*         G. L. GOLDEN. 76/12/08. ADAPTED FOR MALET FROM NOS. 
* 
*         CVTINT - CONVERTS ONE WORD OF DISPLAY CODE DIGITS TO A BINARY 
*         VALUE. CONVERSION MAY BE IN OCTAL OR DECIMAL BY THE FOLLOWING 
*         CONDITIONS. 
* 
*         (1.)  ASSUMED BASE SPECIFIED BY CALLER. 
*         (2.)  POST RADIX SPECIFICATION.  (B = OCTAL, D = DECIMAL) 
*         (3.)  PRESENCE OF 8 OR 9 WILL FORCE DECIMAL IF NO *B* POST
*               RADIX.
* 
*         ERROR CONDITIONS SENSED ARE - 
* 
*         (1.)  PRESENCE OF NON-DIGIT IN WORD.
*         (2.)  PRESENCE OF CHARACTER AFTER POST RADIX. 
*         (3.)  PRESENCE OF 8 OR 9 WITH POST RADIX = B. 
* 
*         ENTRY (X5) = WORD TO CONVERT. 
*               (B7) > 0 IF DECIMAL BASE ASSUMED. 
*               (B7) = 0 IF OCTAL BASE ASSUMED. 
* 
*         EXIT  (X6) = CONVERTED DIGITS.
*               (X4) .NE. 0 IF ERROR IN ASSEMBLY. 
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  NONE.
* 
*         USES   A - NONE.
*                X - 0, 1, 2, 3, 4, 5, 6, 7.
*                B - 2, 3, 4, 5.
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- CONVERT ONE WORD OF DISPLAY CODE DIGITS IN X1 TO A
*                   BINARY VALUE IN X6.  CONVERSION MAY BE IN OCTAL OR
*                   DECIMAL  BY THE CONDITION IN B7, DISPLAY CODE POST
*                   RADIX, OR  PRESENTS OF AN 8 OR 9 INT THE WORD, AND
*                   RETURN TO CALLER. 
* 
 CVTINT   DATA   0           ENTRY/EXIT 
          SX4    7774B       MASK FOR \0123456789@
          MX0    -6          (X0) = CHARACTER MASK. 
          MX6    0           CLEAR OCTAL
          SB2    B1+B1       (B2) = 2 
          BX7    X7-X7       CLEAR DECIMAL
          SB3    -1R0        (B3) = CONVERSION CONSTANT 
          SB5    6           TEST FIRST CHARACTER 
          LX2    X5,B5
          BX3    -X0*X2 
          ZR     X3,CVT3     IF ZERO WORD 
          SX2    X3+B3
          LX4    21 
          NG     X2,CVTINT   IF FIRST CHARACTER ALPHABETIC
          SB5    B0+         CLEAR 8/9 PRESENT
          SX3    7           MASK FOR 8/9 
          EQ     CVT2        ENTER CONVERSION LOOP
  
 CVT1     LX2    X7,B2       DECIMAL * 10 
          IX7    X2+X7
          LX6    3           OCTAL * 8
          BX2    -X3*X1      8/9 PRESENCE 
          LX7    1
          BX6    X6+X1       OCTAL + NEW DIGIT
          IX7    X7+X1       DECIMAL + NEW DIGIT
          SB5    B5+X2       NOTE 8/9 
 CVT2     LX5    6           NEXT CHARACTER 
          BX1    -X0*X5 
          SB4    X1          CHECK CHARACTER
          LX2    X4,B4
          SX1    X1+B3       CONVERT CHARACTER
          BX5    X0*X5       CLEAR CHARACTER
          NG     X2,CVT1     LOOP IF DIGIT
  
*         CHECK FOR POST RADIX SPECIFICATION. 
  
          SB3    B5+B7       SET BASE (ASSUMED OR 8/9)
          ZR     B4,CVT3     IF END OF ASSEMBLY 
          SB3    B2+B2       BASE = DECIMAL 
          NZ     X5,CVTINT   RETURN IF NOT LAST CHARACTER 
          EQ     B4,B3,CVT3  IF *D* 
          SB5    B4-B5
          NE     B5,B2,CVTINT RETURN IF NOT *B* OR *B* AND 8/9 PRESENT
          SB3    B0          SET OCTAL
 CVT3     MX4    0           CLEAR ERROR
          ZR     B3,CVTINT   RETURN IF BASE = OCTAL 
          BX6    X7          SET DECIMAL
          EQ     CVTINT 
          EJECT 
 FILL     TITLE  FILL - FILL BUFFER AREA WITH PATTERN.
**        FILL - FILL BUFFER AREA WITH PATTERN IN X1 FROM B2 TO B3
*                INCLUSIVE. 
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         ENTRY (B2) = ADDRESS OF BUFFER. 
*               (B3) = LAST WORD ADDRESS TO STORE.
*               (X1) = PATTERN TO STORE.
* 
*         EXIT  (B2) = LAST WORD ADDRESS OF BUFFER+1. 
*               (X1) = PATTERN STORED.
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  (B2) TO (B2) + (B3). 
* 
*         USES   A - 6. 
*                X - 1, 6.
*                B - 2, 3.
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- FILL BUFFER B2-B3 WITH VALUE IN X1 AND RETURN.
* 
 FILL     DATA   0
          LT     B3,B2,FILL  IF LWA OF STORE GT FWA 
          BX6    X1 
 FIL1     SA6    B2          STORE PATTERN
          SB2    B2+B1       INCREMENT B2 BY 1
          LE     B2,B3,FIL1  IF ADDRESS LE LWA
          EQ     FILL 
          EJECT 
 KLM      TITLE  KLM - POST K/L DISPLAY MESSAGE.
***       KLM - POST K/L DISPLAY MESSAGE. 
* 
*         G. L. GOLDEN   77/09/02.
* 
*         POST MESSAGE ONTO LINE 50 K/L DISPLAY.
* 
*         ENTRY  (B2) = ERROR MESSAGE ADDRESS.
* 
*         EXIT   (B2) = ERROR MESSAGE ADDRESS.
* 
*         ROUTINES CALLED  - BLK - BLANK FILL WORD. 
* 
*         DATA AREAS USED  - KLMSG - LINE 50 MESSAGE BUFFER.
*                            BLANKS- WORD CONTAINING BLANKS.
* 
*         USES   A - 1, 6.
*                X - 1, 5, 6. 
*                B - 3, 4.
* 
*         MESSAGES - NONE.
* 
  
**        STEP -01- MOVE MESSAGE TO K/L DISPLAY BUFFER AND RETURN.
* 
 KLM      DATA   0
          SA1    B2 
          SB3    KLMSG
          SB4    KLMSG+5
 KLM1     BX6    X1 
          SA6    B3          STORE WORD OF MESSAGE
          SB3    B3+B1       INCREMENT STORE ADDRESS
          GT     B3,B4,KLM3  IF SIX WORDS MOVED 
          MX5    -12
          SA1    A1+B1
          BX5    -X5*X1      GET LOWER 12 BITS OF NEXT WORD 
          NZ     X5,KLM1     IF MESSAGE DID NOT CONTAIN ZERO BYTE 
          RJ     BLK         BLANK FILL WORD
          SA6    B3 
          SA1    BLANKS 
          BX6    X1 
 KLM2     SB3    B3+B1       INCREMENT STORE ADDRESS
          GT     B3,B4,KLM3  IF SIX WORDS DONE
          SA6    B3 
          EQ     KLM2        LOOP TO BLANK FILL MESSAGE 
  
 KLM3     EQ     KLM         RETURN 
 LOADOVL  TITLE  LOADOVL - LOAD OVERLAY 
          EJECT 
**        LOADOVL - LOAD OVERLAY
* 
*         K. B. SMITH. 78/2/6.
* 
*         LOADOVL - MAKES A LOADER REQUEST TO LOAD AN OVERLAY 
*                   IF THAT OVERLAY IS NOT ALREADY IN CORE. 
* 
*         ENTRY 
* 
*           X1 = ADDRESS OF OVLTAB MACRO
* 
*         EXIT
* 
*           REGISTERS ARE RESTORED.  OVERLAY HAS BEEN LOADED. 
* 
**        STEP -01- SAVE REGISTERS. IF OVERLAY ALREADY LOADED THEN
*                   STEP 3, ELSE STEP 2.
* 
 LOADOVL  DATA   0
          SB1    0
          RJ     SVREG             SAVE REGISTERS 
          SA1    X1                READ LOADER CALL PARAMS
          BX6    X1 
          SA6    LOADOVA+1   AND SAVE LOCALLY 
          SA2    A1+B1
          BX6    X2 
          SA6    A6+B1
          MX2    12 
          BX2    X1*X2             X2=L1,L2 
          MX3    6
          BX3    X3*X2             X3=L1
          BX4    X2-X3             X4=L2
          ZR     X4,LOADOV1        IF PRIMARY LOAD
          SA1    LOADOVB           GET CURRENT PRIMARY
          BX5    X3-X1
          NZ     X5,LOADOV2        WRONG PRIMARY
          SA1    LOADOVC           GET CURRENT SECONDARY
          BX5    X2-X1
          ZR     X5,LOADOV4        IF OVERLAY ALREADY LOADED
          EQ     LOADOV2           GO LOAD OVERLAY
 LOADOV1  SA1    LOADOVB
          BX5    X3-X1
          ZR     X5,LOADOV4        IF OVERLAY ALREADY LOADED
* 
**        STEP -02- LOAD NEW OVERLAY
* 
          MX2    0                 CLEAR SECONDARY
 LOADOV2  BX6    X3 
          SA6    LOADOVB           SAVE PRIMARY 
          BX6    X2 
          SA6    LOADOVC           SAVE SECONDARY 
          SA1    64B
          MX7    42 
          BX7    X7*X1
          SA7    LOADOVA           SET FILE NAME
          SA1    A1+B1
          SX6    B1 
          LX6    18 
          BX6    X1*X6
          ZR     X6,LOADOV3        IF LOCAL FILE LOAD 
          SA1    A7+B1
          LX6    24 
          BX6    X1+X6             SET LIBRARY LOAD OPTION BIT
          SA6    A1 
          SA1    LOADOVD
          BX1    -X1*X7 
          NZ     X1,LOADOV3        IF NOT LIBRARY NUCLEUS 
          SA1    A1+B1
          BX7    X1 
          SA7    A7                CHANGE TO SYSOVL 
 LOADOV3  LOADREQ  LOADOVA,RECALL 
* 
**        STEP -03- RESTORE REGISTERS AND RETURN
* 
 LOADOV4  RJ     SVREG
          EQ     LOADOVL
* 
 LOADOVA  BSS    3                 LOADREQ STORAGE
 LOADOVB  DATA   0                 CURRENT PRIMARY OVERLAY
 LOADOVC  DATA   0                 CURRENT SECONDARY
 LOADOVD  VFD    60/7LNUCLEUS 
          VFD    60/6LSYSOVL
          EJECT 
 MSG      TITLE  MSG - SEND MESSAGE TO DAYFILE AND B DISPLAY. 
**        MSG - SEND MESSAGE TO DAYFILE AND B DISPLAY.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         MESSAGE PROCESSOR POST MESSAGE IN DAYFILE AND ON B DISPLAY. 
* 
*         ENTRY (B2) = ADDRESS OF MESSAGE.
* 
*         EXIT  (B2) = ADDRESS OF MESSAGE.
* 
*         ROUTINES CALLED -  CVTDIS - CONVERT BINARY TO OCTAL DISPLAY.
*                            PRINT  - TO POST DAYFILE LIMIT REACHED.
* 
*         DATA AREAS USED -  MSGLIM - NO. OF MSGS TO ALLOW IN DAYFILE.
*                            MSGBUF - TEMPORARY STORAGE OF MESSAGE. 
*                            FMSG   - MESSAGE LIMIT.
*                            CLRA   - OFF IN DISPLAY CODE.
*                            FDL    - DAYFILE LOG FLAG. 
* 
*         USES   A - 1, 2, 6, 7.
*                X - 1, 2, 5, 6, 7. 
*                B - 4, 5.
* 
*         MESSAGES   DAYFILE LIMIT REACHED DL TURNED OFF. 
* 
  
**        STEP -01- TEST  DAYFILE LOG  FLAG  IF ZERO THEN STEP 3, ELSE
*                   DECREMENT ERROR COUNT THEN STEP 2.
* 
 MSG      DATA   0           ENTRY/EXIT 
          SA1    FDL
          ZR     X1,MSGP4    IF DAYFILE TURNED OFF GO TO RETURN 
          SA1    FMSG 
          ZR     X1,MSGP1    IF INFINITE
          SX6    X1-1 
  
**        STEP -02- IF  LIMIT  WAS  REACHED THEN STEP 3, ELSE UPDATE
*                   PARAMETER DISPLAY AND OUTPUT MESSAGE. 
* 
          SA6    FMSG        STORE NEW COUNT
          NZ     X6,MSGP1    IF LIMIT NOT YET REACHED 
  
          IFEQ   NOS,1,1
          MESSAGE MSGE62,0,R POST (DAYFILE LIMIT REACHED DL TURNED OFF.)
  
          IFEQ   NOSBE,1,1
          MESSAGE MSGE62,,R  POST (DAYFILE LIMIT REACHED DL TURNED OFF.)
  
          SB2    MSGE62 
          RJ     PRINT
          SA1    MSGOFF            GET DISPLAY CODE FOR -OFF- 
          MX5    18 
          SA2    KLSW+15
          BX6    -X5*X2      CLEAR PREVIOUS 
          BX6    X6+X1
          SA6    A2          STORE OFF INTO DISPLAY 
          MX6    0
          SA6    FDL         CLEAR DAYFILE LOG
          SX6    SW.DL
          SA1    IRB
          BX6    -X6*X1      CLEAR DAYFILE LOG BIT FROM PPU IR
          SA6    A1 
          EQ     MSGP4
  
 MSGP1    SB4    B0 
 MSGP2    SA1    B2+B4
          BX6    X1 
          SA6    MSGBUF+B4
          SB4    B4+B1
          SB5    B4-MSGMAX
          NG     B5,MSGP2    IF MSGLN WORDS NOT MOVED 
 MSGP3    MX5    48 
          BX6    X5*X6
          SA6    A6          CLEAR BYTE 4 TO TERMINATE MESSAGE
  
          IFEQ   NOSBE,1,1
          MESSAGE MSGBUF,,R  SENT MESSAGE TO DAYFILES+B DISPLAY 
  
          IFEQ   NOS,1,2
          MESSAGE MSGBUF,2,R SEND MESSAGE TO LINE 2 OF B DISPLAY
          MESSAGE MSGBUF,0,R SENT MESSAGE TO DAYFILES+B DISPLAY 
  
**        STEP -03- RETURN. 
* 
 MSGP4    EQ     MSG         RETURN 
  
 MSGMAX   EQU    6           MAXIMUM LENGTH OF DAYFILE MESSAGES 
 MSGOFF   VFD    60/3LOFF 
 MSGBUF   BSS    6           DATA AREA USED TO POST MESSAGES FROM 
          DATA   0
****
*         EXECUTIVE MESSAGES. 
  
 MSGE1    DIS    ,* PARAMETER ERROR ..           .* 
 MSGE1A   EQU    *-2
 MSGE2    DIS    ,* CVT ERROR                    .* 
 MSGE2A   EQU    *-2
 MSGE3    DIS    ,* REQUEST K/L DISPLAY .. MALET.*
 MSGE4    DIS    ,* MODULE NOT CHECKPOINTED.* 
 MSGE5    DIS    ,* MODULE CHECKSUM ERR.* 
 MSGE6    DIS    ,* VALIDATION DENIED- SN IN ERROR.*
 MSGE7    DIS    ,* ILLEGAL WHEN MODULE RUNNING.* 
 MSGE8    DIS    ,* NO NAME FOR MODULE.*
 MSGE9    DIS    ,* MODULE NOT FOUND =           .* 
 MSGE9A   EQU    *-2
 MSGE10   DIS    ,* RANDOM FILE FULL =           .* 
 MSGE10A  EQU    *-2
 MSGE11   DIS    ,* MALET ABORTED.* 
 MSGE12   DIS    ,* ILLEGAL WHEN MODULE NOT RUNNING.* 
 MSGE13   DIS    ,* LINE VALUE OUT OF RANGE.* 
 MSGE14   DIS    ,* DROPPED BY USER.* 
 MSGE15   DIS    ,* RUN DIRECTIVE INCOMPLETE NEEDS ).*
 MSGE16   DIS    ,* TOO MANY MODULES ON RUN DIRECTIVE.* 
 MSGE17   DIS    ,* MODULE NUMBERS MUST BE 2 DIGITS.* 
 MSGE18   DIS    ,* SOURCE BUFFER FULL.*
 MSGE19   DIS    ,* MODULE FUNCTION OUT OF RANGE.*
 MSGE20   DIS    ,* NO DEVICE ASSIGNED.*
 MSGE21   DIS    ,* END OF TEST SERIES           .* 
 MSGE21A  EQU    *-2
 MSGE22   DIS    ,* EOF/EOI INPUT END MALET.* 
 MSGE23   DIS    ,* VERSION NUMBER ERROR RE-ASSEMBLE.*
 MSGE24   DIS    ,* ILLEGAL SEPARATOR RE-ENTER.*
 MSGE25   DIS    ,* LANGUAGE CHANGE - MODULE TERMINATED.* 
 MSGE26   DIS    ,* MODULE WRITTEN  =            .* 
 MSGE26A  EQU    *-2
 MSGE27   DIS    ,* ?*
 MSGE28   DIS    ,* MODULE DOES NOT SUPPORT DEVICE CODE.* 
 MSGE29   DIS    ,* MODULES DUMPED.*
 MSGE30   DIS    ,* MODULE LOCKED USE NEW NAME.*
 MSGE31   DIS    ,* LINE LIMIT--GO/DROP.* 
 MSGE31L  EQU    *
 MSGE31A  DIS    ,* LINE LIMIT EXCEEDED - MALET DROPPED*
 MSGE32   DIS    ,* ROLLOUT MODULE NOT CHECKPOINTED.* 
 MSGE33   DIS    ,* FORMAT WAS OUT OF RANGE.               *
 MSGE34   DIS    ,* MODULE INITILIZE ERROR -- SEE DAYFILE.* 
 MSGE35   DIS    ,* MODULE INITILIZE ERROR MALET DROPPED.*
 MSGE36   DIS    ,* MODULE NAME MUST BE 5 CHARACTERS.*
 MSGE37   DIS    ,* MODULE WILL NOT RUN WITH AL LESS THAN 10B.* 
 MSGE38   DIS    ,* VALIDATION GRANTED- EST000 C00 E0 U00 AL00 DC0000.* 
 MSGE39   DIS    ,*$GO/DROP   EST000 C00 E0 U00 AL00 DC0000.* 
 MSGE41   DIS    ,* VALIDATION DENIED- CH IN ERROR.*
 MSGE42   DIS    ,* MULTIPLE CALLS - MODULE TERMINATED.*
 MSGE43   DIS    ,* HALT - STOPPED ON ERROR*
 MSGE43A  DIS    ,*$GO/DROP HALT STOPPED ON ERROR.* 
 MSGE45   DIS    ,* VALIDATION DENIED- CH,EQ,UN OR EST NEEDED.* 
 MSGE46   DIS    ,* VALIDATION DENIED- DEVICE IN TEST STATE. 0000.* 
 MSGE47   DIS    ,* VALIDATION DENIED- DEVICE NOT FOUND.* 
 MSGE48   DIS    ,* VALIDATION DENIED- CRITICAL INFO MAY BE DESTROYED.* 
 MSGE49   DIS    ,* VALIDATION DENIED- IN USE BY SYSTEM.* 
 MSGE50   DIS    ,* VALIDATION DENIED- AL TOO LOW OR DC MISSING.* 
 MSGE51   DIS    ,* VALIDATION DENIED- DEVICE IN MAINT. STATE. 0000.* 
 MSGE52   DIS    ,* VALIDATION DENIED- SN MUST BE PROVIDED.*
 MSGE53   DIS    ,*$LINE LIMIT--GO/DROP.* 
 MSGE55   DIS    ,* VALIDATION DENIED- DC NEEDED EST ABSENT.* 
 MSGE56   DIS    ,* VALIDATION DENIED- AL ILLEGAL.* 
 MSGE57   DIS    ,* K/L DISPLAY NOT ON - DROP FORCED.*
 MSGE58   DIS    ,* VALIDATION DENIED- CVL RESPONSE OUT OF RANGE.*
 MSGE60   DIS    ,* SYNTAX ERROR* 
 MSGE61   DIS    ,* PPU OVERLAY NAME OUT OF RANGE.* 
 MSGE62   DIS    ,* DAYFILE LIMIT REACHED DAYFILE LOG TURNED OFF.*
 MSGE63   DIS    ,* VALUE TOO LARGE =            *
 MSGE63A  EQU    *-2
 MSGE64   DIS    ,* VALIDATION DENIED- CSU ERR ON LOAD CE CARTRIDGE.*    MAL31A1
 MSGE65   DIS    ,* VALIDATION DENIED- XY LOCATION EMPTY.*               MAL31A1
 MSGE66   DIS    ,* VALIDATION DENIED- ISD ERR LOADING CE CARTRIDGE.*    MAL31A1
 MSGE67   DIS    ,* VALIDATION DENIED- MSC MOUNTED NOT CE CARTRIDGE.*    MAL31A1
 MSGE68   DIS    ,*$GO/DROP UNABLE TO READ LABEL.*
 MSGE69   DIS    ,* VALIDATION DENIED- PICKER CONTAINS CARTRIDGE.*       MAL31A1
 MSGE70   DIS    ,*$GO/DROP I/O DRAWER(S) OPEN OR IN OCCUPIED.* 
 MSGE71   DIS    ,*$GO/DROP UNABLE TO CLEAR CARTRIDGE(S) FROM MST.* 
 MSGE72   DIS    ,* VALIDATION DENIED- ILLEGAL CE CARTRIDGE X/Y.*        MAL31A1
 MSGE73   DIS    ,* VALIDATION DENIED- MSS SUBSYSTEM NOT ACTIVE.*        MAL31A1
 MSGE74   DIS    ,* VALIDATION DENIED- UNABLE TO ACCESS EQUIPMENT.*      MAL31A1
 MSGE75   DIS    ,* VALIDATION DENIED-LOCAL DC BAD.*
 MSGE76   DIS    ,* VALIDATION DENIED-REMOTE DC BAD.* 
 MSGE77   DIS    ,* VALIDATION DENIED-AL TOO HIGH.* 
 MSGE78   DIS    ,* VALIDATION DENIED-CAN NOT ACCESS NETWORK.*
 MSGE79   DIS    ,* VALIDATION DENIED-NAD CONNECTED TO HOST.* 
 MSGE80   DIS    ,* VALIDATION DENIED-NO TCU ENABLES SET.*
 MSGE81   DIS    ,* VALIDATION DENIED-DEVICE STATUS ERROR.* 
 MSGE82   DIS    ,*$GO/DROP INDETERMINATE SITUATION.* 
 MSGE83   DIS    ,* PP PROGRAM REQUESTED ABORT.*
 MSGE84   DIS    ,* PP CALL ERROR.* 
 MSGE85   DIS    ,* OPERATOR DROP.* 
 MSGE86   DIS    ,* OPERATOR KILL.* 
 MSGE87   DIS    ,* OPERATOR RERUN.*
 MSGE88   DIS    ,* ECS PARITY ERROR.*
 MSGE89   DIS    ,* AUTO-RECALL ERROR.* 
 MSGE90   DIS    ,* HUNG IN AUTO RECALL.* 
 MSGE91   DIS    ,* PP PROGRAM NOT IN LIBRARY.* 
 MSGE92   DIS    ,* TERMINAL INTERRUPT.*
 MSGE93   DIS    ,* UNKNOWN REPRIEVE ERROR.*
 MSGE94   DIS    ,* RMS/AL GE 10 DISABLE UNITS NOT UNDER TEST ON CH00.* 
 MSGE95   DIS    ,* VALIDATION DENIED- FSD IN USE.* 
 MSGE96   DIS    ,* VALIDATION DENIED- FSD NOT DOWNED.* 
 MSGE97   DIS    ,* VALIDATION DENIED- CM IN USE.*
 MSGE98   DIS    ,* VALIDATION DENIED- CM NOT DOWNED.*
 MSGE99   DIS    ,* PP PROGRAM WLD CALL ERROR.* 
 MSGE100  DIS    ,*$GO/DROP EQ000-VERIFY DOWN ON ALL MAINFRAMES.* 
 MSGE101  DIS    ,* VALIDATION DENIED- NO BC LOAD ON PREASSIGN.*
 MSGE102  DIS    ,* VALIDATION DENIED- FILE NOT FOUND TAPE PREASSIGN.*
 MSGE103  DIS    ,* VALIDATION DENIED- USER VALIDATION DENIED.* 
 MSGE104  DIS    ,* VALIDATION DENIED- NON-ZERO EXTENDED MEMORY FL.*
 MSGE105  DIS    ,* VALIDATION DENIED- LABELED TAPE WAS PREASSSIGNED.*
 MSGE106  DIS    ,* VALIDATION DENIED- ENTRY FOUND IN EST.* 
 MSGE107  DIS    ,* VALIDATION DENIED- MNE/DEVICE CODE INCOMPATIBLE.* 
 MSGE108  DIS    ,* VALIDATION DENIED- INCORRECT CVL REQUEST PARAM(S).* 
 MSGE109  DIS    ,* VALIDATION DENIED- ADDRESS OUT OF RANGE.* 
 MSGE110  DIS    ,* VALIDATION DENIED- INCORRECT CVL PARAM COMBINATION.*
 MSGE111  DIS    ,* VALIDATION DENIED- ENTRY NOT IN EST.* 
 MSGE112  DIS    ,* VALIDATION DENIED- CEVAL I/O SEQUENCE ERROR.* 
 MSGE113  DIS    ,* VALIDATION DENIED- NON-ZERO EQUIP NUMBER FOR RMS.*
 MSGE114  DIS    ,* CIO PP UNAVAILABLE TO MALET.* 
 MSGE115  DIS    ,* CIO CHANNEL NOT ASSIGNED FOR WLD, REASSIGN CIO CH.* 
  
**        COMPILER ERROR MESSAGES.
  
 MSG1     DIS  ,/ *** SYNTAX ERROR./
 MSG2     DIS  ,/ *** SUBSCRIPT IS NOT TERMINATED./ 
 MSG3     DIS  ,/ *** OCTAL OR EQUATED VALUE IS OUT OF RANGE./
 MSG4     DIS  ,/ *** BUFFER SUBSCRIPT ILLEGAL./
 MSG5     DIS  ,/ *** UNDEFINED STATEMENT NUMBER./
 MSG6     DIS  ,/ *** EQUATE TABLE FULL - MAXIMUM OF 20 ALLOWED./ 
 MSG7     DIS  ,/ *** EQUATED NAME HAS AN ILLEGAL LENGTH./
 MSG8     DIS  ,/ *** MODULE OVERFLOW - REDUCE SIZE./ 
 MSG9     DIS  ,+ *** COMMENT CARD OUT OF MODULE/END CARD RANGE.+ 
 MSG10    DIS  ,/ *** COMPILE CARD ERR  MODULE=AAANNN./ 
 MSG11    DIS  ,/ *** FIRST CARD NOT A MODULE CARD./
 MSG12    DIS  ,/ *** MODULE CARD ERROR MODULE=AAANNN./ 
 MSG13    DIS  ,/ *** SYNTAX ERROR - COLUMN 3 MUST BE A BLANK./ 
 MSG14    DIS  ,/ *** SYNTAX ERROR - STATEMENT NUMBER MUST BE 0-77B./ 
 MSG15    DIS  ,/ *** DOUBLE-DEFINED STATEMENT NUMBER./ 
 MSG16    DIS  ,/ *** COMPILER ERRORS - MODULE=AAANNN./ 
 MSG18    DIS  ,/ *** UNRECOGNIZED STATEMENT./
 MSG19    DIS  ,/ *** NO END STATEMENT- MODULE=AAANNN./ 
 MSG20    DIS  ,/ *** ILLEGAL FORMAT STATEMENT NUMBER./ 
 MSG22    DIS  ,/ *** FORMAT BLOCK FULL - MAXIMUM OF 24 ALLOWED./ 
 MSG23    DIS  ,/ *** SOURCE OVERFLOW   MODULE=AAANNN./ 
 MSG24    DIS  ,/ *** STATEMENT OVERFLOW - REDUCE SIZE./
 MSG25    DIS  ,/ *** ILLEGAL HEXADECIMAL CONVERSION./
 MSG26    DIS  ,/ *** BASE HEX ILLEGAL WHEN NOT 16BIT./ 
****
          EJECT 
 MTRDIR   TITLE  MTRDIR - PROCESS INPUT DIRECTIVES. 
**        MTRDIR - PROCESS INPUT DIRECTIVES.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         MTRDIR - PROCESS INPUT DIRECTIVES FROM K/L DISPLAY AND/OR 
*                  THE INPUT FILE. THE FOLLOWING TASKS ARE PERFORMED; 
* 
*           1. CALL RDINP TO READ INPUT DATA FROM K/L DISPLAY 
*              OR INPUT FILE. 
*           2. TEST IF INPUT IS A DIRECTIVE.
*           3. CALL SUBROUTINE TO PROCESS DIRECTIVE.
*           4. CALL STORES TO STORE SOURCE WORD IF NOTDIRECTIVE.
*           5. RETURN IF INPUT NOT PRESENT OR DROP FLAG SET.
* 
*         ENTRY  NONE.
* 
*         EXIT   FDROP = 1  OR  NO INPUT DATA.
* 
*         ROUTINES CALLED -  CRACK   - CRACKS STRING OF CHARACTERS. 
*                            POST    - POST MESSAGE.
*                            PRINT   - PRINT MESSAGE ON OUTPUT FILE.
*                            RDINP   - READS INPUT DATA.
*                            STORES  - STORE SOURCE DATA. 
*                            UPDIS   - UPDATE K/L DISPLAY.
*                           FIND    - CRACK CHARACTER STRING. 
*                           MSG     - POST MESSAGE INTO DAYFILE.
* 
*                            ASSIGN  - PROCESS ASSIGN DIRECTIVE.
*                            AUTO    - PROCESS AUTO DIRECTIVE.
*                            CLRSW   - PROCESS CLRSW DIRECTIVE. 
*                            COMPILE - PROCESS COMPILE DIRECTIVE. 
*                            DISPLAY - PROCESS DISPLAY DIRECTIVES.
*                            DROP    - PROCESS DROP DIRECTIVE.
*                            DUMP    - PROCESS DUMP DIRECTIVE.
*                            GO      - PROCESS GO DIRECTIVE.
*                            LINE    - PROCESS LINE DIRECTIVE.
*                            LOAD    - PROCESS LOAD DIRECTIVE.
*                            MOVE    - PROCESS MOVE DIRECTIVE.
*                            PARAM   - PROCESS PARAM DIRECTIVE. 
*                            PICTURE - PROCESS PICTURE DIRECTIVE. 
*                            PLUS    - PROCESS PLUS DIRECTIVE.
*                            PUNCHS  - PROCESS PUNCH DIRECTIVE. 
*                            PURGE   - PROCESS PURGE DIRECTIVE. 
*                            RUN     - PROCESS RUN DIRECTIVE. 
*                            SETSW   - PROCESS SETSW DIRECTIVE. 
*                            STOP    - PROCESS STOP DIRECTIVE.
* 
*         DATA AREAS USED -  CRKBUF  - CRACK BUFFER.
*                            FDROP   - TESTS DROP FLAG. 
*                            KEY     - KEY BUFFER.
*                            KEYS    - K/L INPUT BUFFER.
*                            TMTRDIR - SUBROUTINE DIRECTORY TABLE.
*                            SOURCE  - SOURCE BUFFER. 
* 
*         USES   A - 1, 2, 6, 7.
*                X - 1, 2, 3, 5, 6, 7.
*                B - 2, 3, 4, 6.
* 
*         MESSAGES   DIR  = XXXXXXXXX.
*                    SYNTAX ERROR.
*                    RUN DIRECTIVE INCOMPLETE NEEDS ).
* 
  
**        STEP -01- GET INPUT. RETURN IF NONE PRESENT, ELSE CALL
*                   CRACK THEN STEP 2.
* 
 MTRDIR   DATA   0
 DIR1     RJ     RDINP       READ INPUT 
          SA2    FXREF
          ZR     X2,DIR1A    IF CROSS REFERENCE INACTIVE
          SA2    FXEOF
          ZR     X2,DIR1A    IF NOT END OF FILE ON FIRST FILE 
          SX1    DIRY 
          RJ     LOADOVL     LOAD GLOBAL CROSSREFERENCE OVERLAY 
          RJ     XREFG       GENERATE GLOBAL CROSSREFERENCE LISTING 
 DIR1A    SA1    KEY
          ZR     X1,MTRDIR   IF NO INPUT RETURN TO CALLER 
          SB2    KEY
          SB3    B0 
          SB4    60 
          RJ     CRACK       CRACK INPUT
          SA1    CRKBUF      GET FIRST WORD OF CRACKED STRING 
          SB3    B0 
          MX5    42          FORM MASK OF 7 CHARACTERS
  
**        STEP -02- SCAN TMTRDIR TABLE FOR A MATCH IF FOUND THEN
*                   STEP 4, ELSE STEP 3.
* 
 DIR2     SA2    TMTRDIR+B3 
          ZR     X2,DIR3     IF END OF TABLE
          BX3    X2*X5
          BX3    X1-X3
          ZR     X3,DIR5     IF FOUND ENTRY 
          SB3    B3+B1       ADVANCE SEARCH 
          EQ     DIR2        LOOP THRU TABLE
  
**        STEP -03- CHECK IF RUN DIRECTIVE ACTIVE IF YES THEN STEP  18, 
*                   ELSE  CHECK FOR A-Z IN COLUMN 1 IF YES CALL POST
*                   TO POST MESSAGE SYNTAX THEN STEP 1, CALL STORES  TO 
*                   STORE SOURCE DATA THEN TEST IF LIST INPUT TURNED ON 
*                   LO=F OR LO=I ON CALL CARD, IF USED THEN CALL  PRINT 
*                   TO OUTPUT SOURCE LINE WITH LINE NUMBER THEN STEP 1. 
* 
 DIR3     SA1    FRUNUP      CHECK RUN DIRECTIVE ACTIVE FLAG
          NZ     X1,DIR21    IF ACTIVE RUN GO TO PROCESS REST OF DIR
          SA1    FRUN 
          NZ     X1,DIR3A          IF PPU IS RUNNING
          SA1    KEY
          MX5    6
          BX5    X5*X1
          LX5    6           POSITION CHARACTER TO LOWER 6 BITS 
          SX5    X5-1R0 
          PL     X5,DIR4     IF FIRST CHARACTER WAS NOT ALPHA 
 DIR3A    CLOCK  DIRB 
          SB2    DIRB 
          RJ     POST        POST DIRECTIVE IN ERROR
          SB2    MSGE60 
          RJ     POST        POST SYSTAX ERROR
          EQ     DIR1        GET NEXT LINE
  
 DIR4     SX1    DIRX 
          RJ     LOADOVL           LOAD OVERLAYS TO HANDLE SOURCE ENTRY 
          RJ     LOAD11 
          SB2    KEY
          RJ     STORES      GO STORE SOURCE LINE 
          SA1    FULL 
          ZR     X1,DIR1     IF FULL LIST NOT ON
          SA1    DIRC 
          ZR     X1,DIR4A    IF NOT AN * CARD 
          SA1    BLANKS 
          BX7    X1 
          EQ     DIR4B
  
 DIR4A    SA1    PLINE
          SA1    PLINE
          SX1    X1-1        (X1) = LINE NUMBER STORED IN BINARY. 
          RJ     CVTDIS 
          MX5    -18
          BX7    -X5*X7      CLEAR UPPER 42 BITS
          SA1    BLANKS 
          BX5    X5*X1
          BX7    X5+X7       COMBINE BBBBBBB000 WITH 0000000NNN 
          LX7    6           (X7) = BBBBBBNNNB
 DIR4B    SA7    DIR
          SB2    DIR
          SB1    B0          USE PAGING FORMAT FOR PRINTING 
          RJ     PRINT       PRINT SOURCE LINE
          SA1    DIRA 
          BX7    X1 
          SA7    DIR         RESTORE DIR =    MESSAGE 
          EQ     DIR1        GET NEXT LINE
  
**        STEP -04- POST DIR = MESSAGE ON OUTPUT FILE. JUMP TO
*                   SUBROUTINE IF RUN DIRECTIVE WAS COMPLETE, ELSE
*                   POST RUN DIRECTIVE INCOMPLETE MSG THEN STEP 25. 
* 
 DIR5     CLOCK  DIRB        STORE CLOCK INTO DIRECTIVE MSG 
          SB2    DIRB 
          RJ     PRINT       OUTPUT DIRECTIVE=(KEY) 
          SB6    X2          MOVE ADDRESS TO B6 
          SA1    FRUNUP 
          ZR     X1,DIR7     IF RUN DIRECTIVE WAS NOT INCOMLETE 
          SB2    MSGE15      SET FLAG FOR MESSAGE NUMBER
          RJ     POST        MSG *RUN DIRECTIVE INCOMPLETE NEEDS )* 
          EQ     DIR30       SKIP JUMP TO SUBROUTINE
  
 DIR7     SB3    B3-TMTRA 
          GE     B3,DIR7A          IF DIRECTIVE MIGHT BE ILLEGAL
          SX1    DIRX 
          RJ     LOADOVL           LOAD DIRECTIVES OVERLAY -A-
          JP     B6                GO PROCESS DIRECTIVE 
 DIR7A    SA1    FRUN 
          ZR     X1,DIR7B          IF PPU NOT RUNNING 
          SB2    MSGE7
          RJ     POST 
          EQ     DIR30
 DIR7B    SB3    B3-TMTRB 
          GE     B3,DIR7C          IF COMPILE 
          SX1    DIRX 
          RJ     LOADOVL           LOAD DIRECTIVES OVERLAY -A-
          RJ     LOAD11 
          JP     B6                GO PROCESS DIRECTIVE 
 DIR7C    SX1    DIRZ 
          RJ     LOADOVL           LOAD COMPILER
          JP     B6                GO PROCESS DIRECTIVE 
  
**        STEP -05- PROCESS ASSIGN THEN STEP 25.
* 
 DIR8     RJ     ASSIGN 
          EQ     DIR30
  
**        STEP -06- PROCESS CLRSW THEN STEP 25. 
* 
 DIR9     RJ     CLRSW
          EQ     DIR30
  
**        STEP -07- PROCESS COMPILE THEN STEP 25. 
* 
 DIR10    RJ     COMPILX           ENTER COMPILER 
  
 DIR10H   SA1    FINP 
  
          ZR     X1,DIR30    IF COMPILE CARD WAS FROM INPUT 
          SX1    DIRX 
          RJ     LOADOVL
          SB3    DSOURCE
          RJ     UPDIS       UPDATE DISPLAY WITH SOURCE+ERRORS
          EQ     DIR30
  
**        STEP -08- PROCESS DISPLAY THEN STEP 25. 
* 
 DIR11    RJ     DISPLAY
          EQ     DIR30
  
**        STEP -09- PROCESS DROP THEN STEP 25.
* 
 DIR12    RJ     DROP 
          EQ     DIR30
  
**        STEP -10- PROCESS DUMP THEN STEP 25.
* 
 DIR13    RJ     DUMP 
          MX6    0
          SA6    FCHK        CLEAR CHECKPOINT FLAG
          SA6    FSTOP       CLEAR STOP FLAG
          EQ     DIR30
  
**        STEP -11- PROCESS LINE THEN STEP 25.
* 
 DIR14    RJ     LINE 
          EQ     DIR30
  
**        STEP -12- PROCESS LOAD THEN STEP 25.
* 
 DIR15    MX6    0
          SA6    FCHK        CLEAR CHECKPOINT FLAG
          SA6    FSTOP       CLEAR STOP FLAG
          RJ     LOAD        GO LOAD MODULE 
          EQ     DIR30
  
**        STEP -13- PROCESS MOVE THEN STEP 25.
* 
 DIR16    RJ     MOVE 
          EQ     DIR30
  
**        STEP -14- PROCESS PARAM THEN STEP 25. 
* 
 DIR17    RJ     PARAM
          EQ     DIR30
  
**        STEP -15- PROCESS PICTURE THEN STEP 25. 
* 
 DIR18    RJ     PICTURE
          EQ     DIR30
  
**        STEP -16- PROCESS PLUS THEN STEP 25.
* 
 DIR19    RJ     PLUS 
          EQ     DIR30
  
**        STEP -17- PROCESS PUNCH THEN STEP 25. 
* 
 DIR20    RJ     PUNCHS 
          EQ     DIR30
  
**        STEP -18- PROCESS RUN THEN STEP 25. 
* 
 DIR21    SA1    FRUNUP 
          ZR     X1,DIR21A   IF RUN NOT ACTIVE ALLREADY 
          CLOCK  DIRB 
          SB2    DIRB 
          RJ     PRINT       OUTPUT DIR MESSAGE 
 DIR21A   RJ     RUN
          EQ     DIR30
  
**        STEP -19- PROCESS GO THEN STEP 25.
* 
 DIR22    RJ     GO 
          EQ     DIR30
  
**        STEP -20- PROCESS SETSW THEN STEP 25. 
* 
 DIR23    RJ     SETSW
          EQ     DIR30
  
**        STEP -21- PROCESS STOP THEN STEP 25.
* 
 DIR24    RJ     STOP 
          EQ     DIR30
  
**        STEP -22- PROCESS PURGE THEN STEP 25. 
* 
 DIR25    RJ     PURGE
          EQ     DIR30
  
**        STEP -23- PROCESS MINUS THEN STEP 25. 
* 
 DIR26    RJ     MINUS
          EQ     DIR30
  
**        STEP -24- PROCESS LIST THEN STEP 25.
  
 DIR27    RJ     LIST 
          EQ     DIR30
  
**        STEP -24A- PROCESS SEND THEN STEP 25. 
* 
 DIR28    RJ     SEND        PROCESS SEND DIRECTIVE 
          EQ     DIR30
  
**        STEP -24B- PROCESS SCRATCH DIRECTIVE THEN STEP 25.
* 
 DIR29    RJ     SCRX 
          EQ     DIR30
  
**        STEP -24C- PROCESS CLRDS DIRECTIVE THEN STEP 25.
* 
 DIR29A   RJ     CLRDS
          EQ     DIR30
  
**        STEP -24D- PROCESS SETDS DIRECTIVE THEN STEP 25.
* 
 DIR29B   RJ     SETDS
          EQ     DIR30
  
**        STEP -24E- PROCESS AUTO THEN STEP 25. 
* 
 DIR29C   MX6    0
          SA6    FSUSPI      CLEAR SUSPEND READING INPUT FLAG 
          SA1    FTERM
          ZR     X1,DIR30    IF TERMINAL MODE NOT ON
          SA1    RDIC 
          ZR     X1,DIR30    IF NAME WAS NOT CHANGED
          SB5    6
          SB4    B0 
 DIR29D   SA1    RDIC+B4     MOVE THE ALTERNATE FILE FET
          MX6    0
          SA6    RDIC+B4     CLEAR THE FET HOLDER 
          BX6    X1 
          SA6    INPUT+B4 
          SB4    B4+B1
          LT     B4,B5,DIR29D   IF SIX WORDS NOT MOVED
          SB5    65 
          SB4    B0 
 DIR29E   SA1    RDID+B4     MOVE THE ALTERNATE FILE FET
          BX6    X1 
          SA6    BUFIN+B4 
          MX6    0           CLEAR THE BUFFER 
          SA6    RDID+B4
          SB4    B4+B1
          LT     B4,B5,DIR29E   IF SIXTY FIVE WORDS NOT MOVED 
          EQ     DIR30
  
**        STEP -25- RETURN TO STEP 1 IF DROP NOT ON ELSE RETURN.
* 
 DIR30    MX6    0
          SA6    FERR        CLEAR FLAG SOURCE BUFFER OVERFLOW
          SA1    FDROP
          NZ     X1,MTRDIR   IF DROP FLAG SET RETURN
          IFEQ   NOS+NOS4+NOS5,2,2
          SA1    FTINT
          NZ     X1,MTRDIR   IF TERM INT FLAG SET RETURN
          EQ     DIR1        LOOP FOR MORE INPUT
  
DIRC      DATA   0           LINE FLAG 0=SOURCE 1=* COMMENT 
**        TABLE TMTRDIR LOOK UP TABLE FOR DIRECTIVE ENTRY POINTS. 
* 
*         FORMAT AS FOLLOWS;
* 
*         VFD    42/A,18/B
* 
*                A = DISPLAY CODE DIRECTIVE.
*                B = ADDRESS TO JUMP TO.
* 
 TMTRDIR  BSS    0
          VFD    42/4LAUTO,18/DIR29C
          VFD    42/5LCLRDS,18/DIR29A 
          VFD    42/5LCLRSW,18/DIR9 
          VFD    42/4LDROP,18/DIR12 
          VFD    42/4LLINE,18/DIR14 
          VFD    42/1LL,18/DIR14
          VFD    42/1L-,18/DIR26
          VFD    42/5LPARAM,18/DIR17
          VFD    42/1LP,18/DIR17
          VFD    42/7LPICTURE,18/DIR18
          VFD    42/1L+,18/DIR19
          VFD    42/5LSETDS,18/DIR29B 
          VFD    42/5LSETSW,18/DIR23
          VFD    42/4LSTOP,18/DIR24 
          VFD    42/1LS,18/DIR24
          VFD    42/7LMODULES,18/DIR11
          VFD    42/6LSOURCE,18/DIR11 
          VFD    42/3LPPU,18/DIR11
          VFD    42/7LDEVICES,18/DIR11
          VFD    42/5LMALET,18/DIR11
          VFD    42/4LLIST,18/DIR27 
          VFD    42/4LSEND,18/DIR28 
*                                  PRECEEDING DIRECTIVES ARE LEGAL
*                                  WHILE PPU IS RUNNING 
          VFD    42/3LRUN,18/DIR21
          VFD    42/1LR,18/DIR21
          VFD    42/2LGO,18/DIR22 
          VFD    42/1LG,18/DIR22
 TMTRA    =      *-TMTRDIR
          VFD    42/6LASSIGN,18/DIR8
          VFD    42/1LA,18/DIR8 
          VFD    42/4LDUMP,18/DIR13 
          VFD    42/4LLOAD,18/DIR15 
          VFD    42/4LMOVE,18/DIR16 
          VFD    42/1LM,18/DIR16
          VFD    42/5LPUNCH,18/DIR20
          VFD    42/3LRUN,18/DIR21
          VFD    42/1LR,18/DIR21
          VFD    42/2LGO,18/DIR22 
          VFD    42/1LG,18/DIR22
          VFD    42/5LPURGE,18/DIR25
          VFD    42/7LSCRATCH,18/DIR29
 TMTRB    =      *-TMTRDIR-TMTRA
          VFD    42/7LCOMPILE,18/DIR10
          VFD    42/1LC,18/DIR10
          VFD    60/0 
* 
*                                  LOAD DIRECTIVES OVERLAY -A-
 DIRX     OVLTAB 7LMALET10,1,0
*                            LOAD GLOBAL CROSSREFERENCE OVERLAY 
 DIRY     OVLTAB 7LMALET40,4,0
*                                  LOAD COMPILER OVERLAY
 DIRZ     OVLTAB 7LMALET20,2,0
          EJECT 
 POST     TITLE  POST- SEND MESSAGE TO OUTPUT AND POST ON DISPLAY.
**        POST- SEND MESSAGE TO OUTPUT AND POST ON DISPLAY. 
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         POST MESSAGE ON THE LINE 50 K/L DISPLAY  AND  CALL  PRINT  TO 
*         POST MESSAGE ON OUTPUT. 
* 
*         ENTRY (B2) = ERROR MSG ADDRESS TERMINATED WITH ZERO BYTE. 
* 
*         EXIT  (B2) = (B2) FROM ENTRY. 
* 
*         ROUTINES CALLED - KLM   - POST MESSAGE ON LINE 50.
*                           PRINT - LOG MESSAGE ON OUTPUT FILE. 
* 
*         DATA AREAS USED - NONE. 
* 
*         USES   A - 1, 6.
*                X - 1, 6.
*                B - 3. 
*                B - 3, 4.
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- MOVE MESSAGE TO K/L DISPLAY, THEN STEP 2. 
* 
 POST     DATA   0
          RJ     KLM         MOVE MESSAGE TO KL DISPLAY LINE 50 
  
**        STEP -02- CALL PRINT TO OUTPUT MESSAGE TO OUTPUT THEN RETURN. 
* 
 POS3     MX6    0
          SA6    MSGBUF+MSGMAX-1
          SB3    MSGMAX-2 
 POS4     SA1    B2+B3
          BX6    X1 
          SA6    B3+MSGBUF   MOVE MESSAGE TO BUFFER AREA
          SB3    B3-B1       DECREMENT STORE INDEX
          PL     B3,POS4     IF NOT DONE WITH STORE 
          MESSAGE MSGBUF,2,R POST MESSAGE ONTO B DISPLAY
          RJ     PRINT       POST MESSAGE ONTO OUTPUT FILE
          EQ     POST        RETURN 
          EJECT 
 PRINT    TITLE  PRINT - PRINT OUTPUT FILE. 
**        PRINT - PRINT INFORMATION ON THE OUTPUT FILE. 
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         PRINTS INFORMATION ON OUTPUT FILE IF PL IS ON.
*         ALL B AND X REGISTERS ARE SAVED AND RESTORED ON ENTRY 
*         AND EXIT FROM PRINT. IF FTERM FLAG IS ON PRINT FORMATS OUTPUT 
*         FOR THE TERMINAL LINE WIDTH IF  LESS THAN 130 CHARACTERS. 
* 
*         ENTRY (B2) =ADDRESS OF BUFFER TO PRINT FROM BUFFER TERMINATED 
*                     TERMINATED WITH ZERO BYTE.
*               (B1) = 1  DO NOT USE PAGING FORMAT FOR PRINTING 
*                    = 0  USE PAGING FORMAT FOR PRINTING
* 
*               FPL  =0  RETURN DONT PRINT. 
*                    =1  PRINT MESSAGE ON OUTPUT. 
* 
*               FTERM=0  NOT TERMINAL MODE. 
* 
*                    =X  X = SCREEN WIDTH TERMINAL MODE.
* 
*         EXIT  (X1-X7) RESTORED TO ENTRY CONTENTS. 
*               (B2-B7) RESTORED TO ENTRY CONTENTS. 
*               (A1-A7) CHANGED BY SVREG. 
* 
*         ROUTINES CALLED -  SVREG - SAVE/RESTORE (A/B) REGISTERS.
*                            FILL  - FILL BUFFER AREA.
*                            BLK   - BLANK FILL REGISTER. 
*                            RDINP - READ INPUT FILE. 
*                            CRACK - CRACK PARAMETER STREAM.
* 
*         DATA AREAS USED -  CLINE - PRINT LINE WORKING BUFFER. 
*                            FLL   - LINE LIMIT.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 4, 5, 6.      (ALL RESTORED) 
*                B - 1, 2, 3, 4.         (ALL RESTORED) 
* 
*         MESSAGES    LINE LIMIT--GO/DROP.
*                     LINE LIMIT--N.GO/DROP.
* 
  
**        STEP -01- SAVE  X AND B REGISTERS IF PPU RUNNING THEN STEP 8, 
*                   ELSE IF ERROR LIMIT = 0 THEN STEP 8, ELSE STEP 02.
* 
 PRINT    DATA   0
          SX1    B1          SAVE FORMAT FLAG IN X1 
          SB1    0
          RJ     SVREG       SAVE REGISTERS 
          BX6    X1 
          SA6    PRTE        SAVE FORMAT FLAG 
          IFEQ   NOS+NOS4+NOS5,2,2
          SA1    FTINT
          NZ     X1,PRT8     IF TERMINAL INTERRUPT SET
          SA1    FRUN 
          ZR     X1,PRT0     IF MALET MODULE NOT RUNNING
          SA1    FTERM
          NZ     X1,PRT8     IF TERMINAL USED DO NOT PRINT
  
**        STEP -02- INITIALIZE REGISTERS FOR PRINT IF PRINT LOG OFF 
*                   THEN STEP 8, ELSE STEP 3. 
* 
 PRT0     SA1    FPL         GET PRINT LOG FLAG 
          ZR     X1,PRT8     IF PRINT FILE TURNED OFF RETURN
          SA1    FLL
          ZR     X1,PRT1     IF INFINITE
          SA2    FCHK 
          ZR     X2,PRT1     IF PPU NOT CHECKPOINTED
          SX1    X1-1 
          BX6    X1 
          SA6    FLL         SAVE NEW COUNT FOR NEXT ENTRY
          NZ     X1,PRT1     IF LINE LIMIT NOT REACHED
          SX6    B2 
          SA6    PRTB        SAVE (B2) FOR LATER USE
 PRT0A    SA1    FKL
          ZR     X1,PRT0B    IF NOT KL DISPLAY ON 
          SB2    MSGE31 
          RJ     KLM         POST MSG ON K/L DISPLAY
          MESSAGE MSGE31,2,R POST MESSAGE ON B DISPAAY
          SX6    B1 
          SA6    FEOFI       TURN OFF INPUT FILE
          EQ     PRT0C
  
 PRT0B    SA1    FTERM
          BX6    X1 
          SA6    PRTC              SAVE TERMINAL FLAG 
          ZR     X1,PRT0D    IF NOT TERMINAL MODE 
          MX6    0
          SA6    PRTA        CLEAR INPUT FILE SAVE NAME 
  
          IFEQ   NOSBE,1
          SX6    MSGE31 
          LX6    30 
          SX1    MSGE31L
          BX6    X1+X6
          SA6    OUTPUT+5    STORE TEMP WORKING STORAGE AREA
          SA1    OUTPUT 
          SA2    TERMOUT
          BX2    X1-X2       CHECK FOR ALTERNATE OUTPUT FILE
          AX2    18 
          ZR     X2,PRT0BA   IF NOT TWO OUTPUT FILES
          SA6    TERMOUT+5   STORE TEMP WORKING AREA
          WRITOUT TERMOUT 
          WRITER TERMOUT,,R 
 PRT0BA   WRITOUT OUTPUT
          WRITER OUTPUT,,R
          MX6    0
          SA6    FTERM             CLEAR TEMINAL FLAG 
          ENDIF 
  
          SX6    CLINE
          SX1    CLINE+13 
          LX6    30 
          BX6    X1+X6
          SA6    OUTPUT+5    RESTORE WORKING STORAGE AREA 
          SA6    TERMOUT+5   RESTORE WORKING STORAGE AREA 
  
          IFEQ   NOS,1
          SA1    OUTPUT 
          SA2    TERMOUT
          BX2    X1-X2       CHECK FOR ALTERNATE OUTPUT FILE
          AX2    18 
          ZR     X2,PRT0BA   IF NOT TWO OUTPUT FILES
          WRITEC TERMOUT,MSGE31 
          WRITER TERMOUT,R
 PRT0BA   WRITEC OUTPUT,MSGE31
          WRITER OUTPUT,R 
          ENDIF 
          SA1    INPUT
          MX5    42 
          BX1    X5*X1       EXTRACT INPUT FILE NAME
          SA2    RDIA 
          BX6    X2-X1
          ZR     X6,PRT0C    IF FILE NAME WAS INPUT 
          BX6    X1 
          SA6    PRTA        SAVE FILE NAME FOR RESTORE 
          SX1    B1 
          BX6    X1+X2
          SA6    INPUT       SET LFN TO INPUT 
 PRT0C    RJ     RDINP       GO GET INPUT FROM USER 
          RECALL
          SB2    KEY
          SB3    B0 
          SB4    60 
          RJ     CRACK       CRACK INPUT STREAM 
          SA1    CRKBUF 
          SA2    DGO         DISPLAY CODE FOR GO
          BX2    X2-X1
          ZR     X2,PRT0F    IF USER GAVE GO DIRECTIVE
          SA2    DG 
          BX2    X2-X1
          ZR     X2,PRT0F    IF USER GAVE G 
          SA2    DDROP
          BX2    X2-X1
          NZ     X2,PRT0A    IF USER DID NOT GIVE GO OR DROP
          SB2    MSGE14 
          RJ     KLM         POST MSG ON K/L DISPLAY *DROPPED BY USER*
          IFEQ   NOS,1,2
          MESSAGE MSGE14,0,R
          MESSAGE MSGE14,2,R
  
          IFEQ   NOSBE,1,1
          MESSAGE MSGE14,,R 
          SX6    B1 
          SA6    FDRP 
          SA6    FDROP       SET DROP FLAG
          SA1    IRB
          SX6    SW.CHK 
          BX6    X1+X6
          SA6    A1          SET STOP SWITCH TO PPU 
          EQ     PRT0F
  
* 
*         LINE LIMIT HAS BEEN EXCEEDED WHILE IN BATCH MODE.  ISSUE
*         A DISPLAY AND DAYFILE MESSAGE THEN TERMINATE MALET. 
* 
          IFEQ   NOSBE,1,1
 PRT0D    MESSAGE MSGE31A,,R
  
          IFEQ   NOS,1,2
 PRT0D    MESSAGE MSGE31A,2,R 
          MESSAGE MSGE31A,0,R 
  
          ENDRUN
  
 PRT0F    SA1    FDFT        DEFAULT LINE LIMIT 
          BX6    X1 
          SA6    FLL         RESET LINE COUNTER 
          SA1    PRTC 
          BX6    X1 
          SA6    FTERM             RESTORE TERMINAL FLAG
          MX6    0
          SA6    FEOFI       CLEAR INPUT FILE FOR READING 
          SA2    PRTB 
          SB2    X2          RESTORE (B2) 
          SA2    PRTA 
          ZR     X2,PRT1     IF INPUT FILE WAS NOT RENAMED
          BX6    X2 
          SX2    B1 
          BX6    X6+X2
          SA6    INPUT       RESTORE FILE NAME OF INPUT FILE
  
 PRT1     RJ     CVTDIS 
          MX5    36 
          BX7    -X5*X7 
          LX7    36 
          SA1    KLLL        GET OLD PARAMETER
          MX5    24 
          BX6    -X5*X1      CLEAR OLD LINE LIMIT 
          BX6    X6+X7       SET NEW LINE LIMIT 
          SA6    A1          STORE UPDATED LINE LIMIT 
          SA1    PRTE        FORMAT PRINT FLAG
          NZ     X1,PRT1A    IF NOT PAGING FORMAT 
          SA1    CNTLINE
          SX1    X1-CNTMAX
          NG     X1,PRT1A    IF NOT PASSED LINE LIMIT PER PAGE
          RJ     BANNER      GO PRINT PAGE BANNER 
  
**        STEP -03- MOVE MESSAGE TO CLINE WITH B4 = NUMBER OF WORDS TO
*                   PRINT THEN STEP 3.
* 
 PRT1A    SA1    CNTLINE
          SX6    X1+B1       INCREMENT LINES DONE 
          SA6    A1 
          SA2    BLANKS 
          MX5    -12
          SB3    CLINE
          SB4    B0          (B4) = NUMBER OF WORDS TO PRINT
          SX4    B0 
 PRT2     SA1    X4+B2
          BX6    X1 
          SA6    X4+B3
          SX4    X4+B1
          SX6    X4-LCLINE   MAXIMUM LENGTH OF PRINT LINE 
          ZR     X6,PRT4     IF MAXIMUM LENGTH FOUND GO TO PRINT
          BX6    -X5*X1 
          ZR     X6,PRT3     IF LAST WORD FOUND GO TO PRINT 
          BX6    X2-X1
          ZR     X6,PRT2     IF BLANK WORD LOOP TO MOVE ALL WORDS 
          SB4    X4          ADVANCE NUMBER OF WORDS TO PRINT TO (X4) 
          EQ     PRT2 
  
 PRT3     RJ     BLK
          BX6    X6-X2
          ZR     X6,PRT4     IF CHARACTERS PRESENT CONTAINED BLANKS 
          SB4    X4          STORE LAST WORD OF MESSAGE COUNT 
  
**        STEP -04- CHECK IF USER IS ON TERMINAL IF NO THEN STEP 5, 
*                   ELSE SEE IF LINE WORDS LESS THAN SCREEN SIZE IF YES 
*                   THEN STEP 5, ELSE PRINT FIRST 7 WORDS THEN STEP 5.
* 
 PRT4     MX6    0
          SA6    B4+CLINE+1  CLEAR LWA+1 TO PRINT 
          SA1    FTERM
          ZR     X1,PRT4A          IF NOT ON TERMINAL 
          SA1    OUTPUT 
          SA2    TERMOUT
          BX2    X1-X2
          AX2    18 
          ZR     X2,PRT4B          IF NOT TWO OUTPUT FILES
*                PRINT ON OUTPUT FILE 
          IFEQ   NOS,1                                                   MAL014G
          SX6    B4                                                      MAL014G
          SA6    PRTD              SAVE B4                               MAL014G
 PRT4A    WRITEC OUTPUT,CLINE 
          SA1    PRTD                                                    MAL014G
          SB4    X1                RESTORE B4                            MAL014G
          ENDIF                                                          MAL014G
          IFEQ   NOSBE,1,1
 PRT4A    WRITOUT  OUTPUT 
  
          SA1    FTERM
          ZR     X1,PRT6     IF NOT TERMINAL OUTPUT 
          SA1    INPUT
          SA2    RDIA 
          BX2    X1-X2
          AX2    18 
          NZ     X2,PRT4A1   FILE NAME NOT INPUT
          SA1    FXEOF
          ZR     X1,PRT4B    CROSS REFERENCE EOF FLAG NOT SET 
          SA1    FXREF
          ZR     X1,PRT4B    GLOBAL CROSS REFERENCE NOT TO TERMINAL 
          EQ     PRT6        EXIT 
  
 PRT4A1   SA2    DCOMPIL
          BX2    X1-X2
          AX2    18 
          ZR     X2,PRT6     IF INPUT FILE NAME IS COMPILE
 PRT4B    SA1    FTERM                                                   MAL040G
          SX2    X1-130                                                  MAL040G
          PL     X2,PRT5B          IF SCREEN WIDTH .GE. 130 
          SX1    B4-8 
          NG     X1,PRT5B          IF LESS THAN 7 WORDS TO PRINT
          SA1    CLINE+7
          MX6    0
          SA6    A1 
          BX6    X1 
          SA6    CLINE+13 
          SA2    BLANKS 
          MX6    0
 PRT4C    SA1    A1-B1
          BX1    X1-X2
          NZ     X1,PRT4D    IF WORDS IS NON BLANKS 
          SA6    A1 
          EQ     PRT4C       LOOP 
  
**        STEP -05- PRINT FIRST 7 WORDS OF LINE AND MOVE SECOND 7 WORDS 
*                   TO FIRST 7 WORDS OF LINE. 
* 
          IFEQ   NOSBE,1,1
 PRT4D    WRITOUT  TERMOUT   OUTPUT FIRST 7 WORDS 
  
          IFEQ   NOS,1,1
 PRT4D    WRITEC TERMOUT,CLINE   OUTPUT FIRST 7 WORDS 
  
          SA1    BLANKS 
          BX6    X1 
          SA6    CLINE       MOVE BLANKS TO CLINE(0)
          SA1    CLINE+13 
          BX6    X1 
          SA6    A6+B1       MOVE WORD CLINE(13) TO CLINE(1)
          SA1    CLINE+8
          SB3    5
 PRT5     BX6    X1 
          SA6    A6+B1
          SB3    B3-B1
          SA1    A1+B1
          NZ     B3,PRT5     IF MOVE LAST 7 TO FIRST 7 WORDS NOT DONE 
          MX6    0
          SA6    A6+B1       CLEAR LWA+1
  
**        STEP -06- PRINT LINE ON ACTIVE OUTPUT FILE
* 
          IFEQ   NOS,1,2
 PRT5B    WRITEC TERMOUT,CLINE
          WRITER TERMOUT,R
  
          IFEQ   NOSBE,1,2
 PRT5B    WRITOUT  TERMOUT
          WRITER   TERMOUT,,R 
  
 PRT6     SB2    CLINE
          SB3    CLINE+LCLINE-1 
          SA1    BLANKS 
          RJ     FILL        BLANK FILL PRINT LINE
  
**        STEP -08- RESTORE X AND B REGISTERS AND RETURN TO CALLER. 
* 
 PRT8     RJ     SVREG       RESTORE REGISTERS
          EQ     PRINT       RETURN 
  
 PRTA     DATA   0          LFN FOR INPUT FILE ON LINE LIMIT
 PRTB     DATA   0           CONTENTS OF B2 SAVED HERE ON LINE LIMIT
 PRTC     DATA   0                 TERMINAL FLAG SAVED HERE 
 PRTD     DATA   0                 SAVE B4                               MAL014G
 PRTE     DATA   0           FORMATTED/UNFORMATTED PRINTING FLAG
 PRINTA   DIS    ,*1*        PAGE EJECT 
 DGO      VFD    60/2LGO
 DG       VFD    60/1LG 
 DDROP    VFD    60/4LDROP
 DCOMPIL  VFD    60/7LCOMPILE 
          EJECT 
 RDINP    TITLE  RDINP - READ INPUT FILE AND K/L DISPLAY. 
**        RDINP - READ INPUT FILE AND K/L DISPLAY.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         READ INPUT FILE.  THE INPUT FILE IS TAKEN FROM THREE
*         POSSIBLE SOURCES; 
* 
*           1. LFN FILE. (IF INPUT WAS RE-NAMED BY CALL CARD) 
*           2. INPUT FILE.
*           3. K/L DISPLAY. 
* 
*         ENTRY- INPUT FILE IS OPENED.
*                FEOFI = 0   READ INPUT FILE. 
*                FEOFI = 1   DO NOT READ INPUT. 
* 
*         EXIT - (X1) NON ZERO IF ENTRY PRESENT.
* 
*         ROUTINES CALLED -  FILL - FILL BUFFER.
*                            PRINT- PRINT MSG ON OUTPUT FILE. 
*                            POST - POST MESSAGE ON ACTIVE FILES. 
* 
*         DATA AREAS USED -  KEY  - INPUT DATA BUFFER.
*                            KEYS - INPUT DATA BUFFER K/L DISPLAY.
*                            FKL  - K/L DISPLAY ACTIVE FLAG.
* 
*         USES   A - 1, 2, 6, 7.
*                X - 1, 2, 5, 6, 7. 
*                B - 2, 3.
* 
*         MESSAGES -  ?  (SENT ON NOSBE FOR REQUEST INPUT.) 
*                     EOF/EOI INPUT END MALET.
* 
  
**        STEP -01- CLEAR KEY BUFFER AND TEST TO SEE IF MODULE RUNNING
*                   IF YES THEN STEP 7, ELSE STEP 2.
* 
 RDINP    DATA   0
          SB2    KEY
          SB3    KEY+7
          MX1    0           GET WORD OF ZEROS
          RJ     FILL        CLEAR KEY BUFFER WITH ZEROS
          SA1    FRUN 
          NZ     X1,RDI4     IF MODULE RUNNING
  
**        STEP -02- STEP 7 IF SUSPEND READING INPUT FLAG IS SET.  ELSE
*                   SEE IF EOI HAS BEEN REACHED ON INPUT PREVIOUSLY IF
*                   YES THEN STEP 6, ELSE SET INPUT FLAG THEN STEP 3. 
* 
 RDI1     SA1    FTERM
          ZR     X1,RDI1C    IF TERMINAL MODE NOT ON
          SA1    FSUSPI 
          ZR     X1,RDI1C    IF SUSPEND READING INPUT SET 
          SA1    INPUT
          MX5    42 
          BX1    X5*X1       EXTRACT NAME IN FET
          SA2    RDIA 
          BX6    X2-X1
          ZR     X6,RDI11    IF NAME EQUAL TO INPUT 
          SB5    6
          SB4    B0 
 RDI1A    SA1    INPUT+B4    MOVE THE ALTERNATE FILE FET
          BX6    X1 
          SA6    RDIC+B4
          SA1    INPUT1+B4   MOVE THE NEW FET TO INPUT
          BX6    X1 
          SA6    INPUT+B4 
          SB4    B4+B1
          LT     B4,B5,RDI1A    IF SIX WORDS NOT MOVED
          SX1    B1 
          BX6    X2+X1
          SA6    INPUT       SET NAME = INPUT 
          SB5    65 
          SB4    B0 
 RDI1B    SA1    BUFIN+B4    MOVE THE ALTERNATE FILE FET
          BX6    X1 
          SA6    RDID+B4
          MX6    0           CLEAR THE BUFFER 
          SA6    BUFIN+B4 
          SB4    B4+B1
          LT     B4,B5,RDI1B    IF SIXTY FIVE WORDS NOT MOVED 
          EQ     RDI11
 RDI1C    SA1    FSUSPI 
          NZ     X1,RDI4     IF SUSPEND READING INPUT FLAG SET
 RDI11    SA1    FEOFI
          NZ     X1,RDI3     IF EOF/EOI READ FROM INPUT PREVIOUS
          MX6    0
          SA6    FINP        CLEAR FINP FLAG INPUT FILE 
  
**        STEP -03- READ INPUT THEN STEP 4. 
* 
          IFEQ   NOS,1,1
          READC  INPUT,KEY,9
  
          IFEQ   NOSBE,1
          SA1    FTERM
          ZR     X1,RDI2     IF NOT TERMINAL
          SA1    INPUT
          MX6    42 
          BX1    X6*X1
          SA2    RDIA 
          BX6    X2-X1
          NZ     X6,RDI2     IF FILE NAME WAS NOT INPUT 
          SX6    RDIB 
          SX1    X6+B1
          LX6    30 
          BX6    X6+X1
          SA6    TERMOUT+5
          WRITOUT TERMOUT    OUTPUT ? 
          WRITER TERMOUT,,R 
          SX6    CLINE
          SX1    CLINE+13 
          LX6    30 
          BX6    X6+X1
          SA6    TERMOUT+5   RESTORE WORKING STORAGE ADDRESSES
 RDI2     READIN INPUT
          ENDIF 
  
**        STEP -04- IF NOT EOF/EOI THEN STEP 7, ELSE CLEAR FIRST WORD 
*                   OF KEY BUFFER GET FET NAME FOR INPUT THEN STEP 5. 
* 
          NZ     X1,RDI2A    IF EOR/EOI 
          SA1    KEY
          NZ     X1,RDI6     IF NOT BLANK LINE (ALL ZEROS)
          SA1    BLANK
          BX6    X1 
          SA6    KEY         FORCE ZEROS TO BLANKS
          EQ     RDI6 
  
 RDI2A    MX6    0
          SA6    KEY         CLEAR KEY BUFFER WORD
          SX6    B1 
          SA6    FXEOF       FLAG END OF FILE FOR CROSS-REFERENCE 
          SA1    INPUT
          MX5    42 
          BX1    X5*X1       CLEAR STATUS BITS
          SA2    RDIA 
          BX6    X2-X1
  
**        STEP -05- IF NAME WAS INPUT GO TO STEP 6, ELSE CHANGE NAME TO 
*                   INPUT THEN STEP 2.
* 
          ZR     X6,RDI3     IF NAME = INPUT
          SX1    B1 
          BX6    X2+X1
          SA6    INPUT       STORE FILE NAME INPUT
          EQ     RDI1        GO BACK TO READ INPUT
  
**        STEP -06- SET FLAG FOR EOF/EOI INPUT CHECK IF KL DISPLAY UP 
*                   IF UP THEN STEP 4, ELSE SEE IF DATA NEVER RECEIVED
*                   THEN STEP 7, ELSE POST MSG END MALET EOF/EOI INPUT
*                   SET DROP FLAG THEN STEP 7.
* 
 RDI3     SA1    FTERM       IF NOT TERMINAL MODE SET EOF/EOI 
          ZR     X1,RDI3A 
          IFEQ   NOS,1,1
          READ   INPUT,R
          IFEQ   NOS+NOS+NOS5,2,2 
          MX6    0           CLEAR INTERRUPT FLAG ON EOF/EOI
          SA6    FTINT
          MX6    0
          SA6    FEOFI
          EQ     RDI1        REINPUT
 RDI3A    SX6    B1 
          SA6    FEOFI       SET EOF/EOI FLAG FOR INPUT 
          SA1    FKL
          NZ     X1,RDI4     IF K/L DISPLAY UP
          IFEQ   NOSBE,1,1
          MESSAGE MSGE22,,R        SEND MESSAGE TO DAYFILE
          IFEQ   NOS,1,1
          MESSAGE MSGE22,0,R       SEND MESSAGE TO DAYFILE
          RJ     POST        POST END MALET EOF/EOI INPUT 
          SX6    B1 
          SA6    FDROP       SET DROP FLAG
  
**        STEP -07-  CHECK KL DISPLAY FOR DATA IF NO DATA THEN STEP 8,
*                    ELSE CLEAR LINE 50 MSG, UPDATE KL DISPLAY SWITCH 
*                    AND MOVE ENTRY TO KEY BUFFER.
* 
 RDI4     SA1    KEYS 
          ZR     X1,RDI6     IF K/L DISPLAY NOT UP
          SA1    BLANKS      GET WORD OF BLANKS 
          SB2    KLMSG
          SB3    KLMSG+5
          RJ     FILL        CLEAR KLMSG MSG BUFFER ON K/L DISPLAY
          SX6    B1 
          SA6    FKL         STORE K/L DISPLAY ACTIVE FLAG
          SA6    FINP        SET FINP FLAG FOR K/L DISPLAY INPUT
          SA1    SETA        GET ON IN DISPLAY CODE 
          SA2    KLSW+18
          MX5    -42
          BX2    -X5*X2      CLEAR OFF FROM DISPLAY WORD
          BX6    X2+X1       .OR. ON WITH DISPLAY WORD
          SA6    A2 
          SX6    SW.KL       K/L DISPLAY  BIT FOR IRB 
          SA1    IRB
          BX6    X6+X1
          SA6    IRB         STORE UPDATED SSW FOR K/L
          SB2    B0 
          SB3    6
          MX7    0
 RDI5     SA1    KEYS+B2     READ ENTRY 
          BX6    X1 
          SA6    KEY+B2      STORE ENTRY IN KEY BUFFER
          SA7    A1          CLEAR INPUT WORD 
          SB2    B2+B1
          LE     B2,B3,RDI5  IF SIX WORDS NOT MOVED 
  
**        STEP -08- MOVE FIRST WORD TO X1 (NON ZERO MEANS DATA PRESENT) 
* 
 RDI6     SA1    KEY         (X1) = FIRST WORD OF ENTRY 
          EQ     RDINP       RETURN 
  
 RDIA     VFD    60/5LINPUT 
 RDIB     VFD    60/2L ?
 RDIC     BSSZ   6
 RDID     BSSZ   65 
          EJECT 
 SBYTE    TITLE  SBYTE- STORE BYTE(S).
**        SBYTE - USED TO STORE A BYTE OR BYTES.
* 
*         G. L. GOLDEN. 76/12/08. ADAPTED TO MALET FROM HPA/NORM. 
* 
*         ENTRY  B1 = IPACK = DESTINATION OF DATA.
*                B2 = INPACK= SOURCE OF DATA NBITS RIGHT JUSTIFIED. 
*                B3 = IBIT  = NUMBER OF BITS TO SKIP ON DESTINATION.
*                B4 = NBIT  = NUMBER OF BITS TO MOVE FROM SOURCE. 
*                B5 = NSKIP = NUMBER OF BITS TO SKIP ON DESTINATION.
*                B6 = NBYTE = NUMBER OF BYTES TO DO MINUS ONE.
* 
*         EXITS  B1 = 1.
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  AREA DESCRIBED BY INPUT ARGRUMENTS.
* 
*         USES   A - 1, 2, 3, 6, 7. 
*                X - 0, 1, 2, 3, 4, 5, 6, 7.
*                B - 1, 2, 3, 4, 6, 7.
* 
*         MESSAGES - NONE.
* 
  
**        STEP -01- GET ENTRY PARAMETERS INTO PROPER REGISTERS. 
* 
 SBYTE    DATA   0
          SA1    B1          GET FIRST DESTINATION WORD INTO X1 
          SB7    B2          MOVE SOURCE ADDRESS
          SX4    B3          GET CALCULATED OFFSET IN X4
          SX5    B4          GET BYTE SIZE IN X5
          SB2    X5-1        B2=BYTE SIZE - 1 (SET FOR GENERATING MASK
          SX3    60          CONSTANT OF 60.
          SB4    X5          BYTE SIZE ALSO IN B4 
  
**        STEP -02- GET BYTE TO STORE THEN STEP 3.
* 
 SBT1     SA2    A1+1        GET SECOND WORD (WHETHER NEEDED OR NOT)
          IX7    X3-X4       ACTUAL OFFSET = 60 - CALC OFFSET 
          SB3    X7          PUT INTO B3
          SA3    B7          GET SOURCE WORD
          SB1    B3-B4       FIND IF BYTE IS SPLIT OR NOT 
          BX6    X3          DOUBLE IMAGE 
          BX7    X3          OF SOURCE BYTE  TO X6 AND X7 
          NG     B1,SBT4
          MX0    1           FORM 1ST MASK
          AX0    B2,X0       IN X0
          LX0    B4,X0       RIGHT JUSTIFY MASK 
          LX0    B1,X0       AND MASK 
  
**        STEP -03- STORE BYTE IN WORD. 
* 
 SBT2     LX6    B1,X6       LINE UP BYTE 
          BX1    -X0*X1      MAKE HOLE IN OUTWORD 
          BX6    X0*X6       TAKE CARE OF ANY SIGN EXTENSION
          BX6    X1+X6       COMBINE THE BYTES
          SA6    A1          STORE THE WORD 
          PL     B1,SBT3     IF B1 IS NOT NEG, WE ARE DONE
          SX1    B4-B3       2ND MASK SIZE = B.S. - ACTUAL OFFSET 
          SX3    60          RETURN CONSTANT
          IX6    X3-X1       LEFT SHIFT = 60 - 2ND MASK SIZE
          SB1    X1-1        MAKE 
          MX0    1           2ND
          AX0    B1,X0       MASK 
          SB1    X6          LEFT SHIFT 
          LX7    B1,X7       BYTE 
          BX2    -X0*X2      MAKE HOLE IN OUT WORD
          BX7    X0*X7       KNOCK OFF TRASH
          BX7    X2+X7       COMBINE
          SA7    A2          STORE
  
**        STEP -04- IF DONE THEN STEP 5, ELSE  POSITION NEXT BYTE THEN
*                   STEP 3. 
* 
 SBT3     ZR     B6,SBT5
          SB6    B6-1        IF NOT DONE COUNT
          SB7    B7+1 
          SX3    60 
          PX7    X3          FLOAT 60  =  B 
          IX4    X4+X5
          SX4    X4+B5       COFFSET = OLD OFFSET+BYTE SIZE+SKIP SIZE 
          NX7    X7          NORMALIZE B
          PX6    X4          FLOAT NEW COFFSET (IN BITS)  =  A
          NX6    X6          NORM  A
          FX2    X6/X7       Q = A/B  .GET QUOTIENT INX2
          UX2    B1,X2
          LX2    B1,X2       GET INTEGER QUOTIENT 
          SB1    X2          PUT IN B1
          PX2    X2          REPACK AND 
          NX2    X2          NORMALIZE
          FX4    X7*X2       X4 = B*Q  .GET INTEGER PRODUCT 
          FX4    X6-X4       R = A - B*Q  (GET REMAINDER IN X4) 
          UX4    B3,X4       GET INTEGER
          LX4    B3,X4       REMAINDER IN X4 = NEW CALC OFFSET) 
          SA1    A1+B1       GET NEW WORD IN
          JP     SBT1        GO LOOP
 SBT4     SB2    B3-1        GET SHIFT CONSTANT 
          MX0    1
          AX0    B2,X0       FORM THE MASK IN X0
          LX0    B3,X0       RIGHT JUSTIFY MASK 
          SB2    B4-1        RESET B2 
          JP     SBT2 
  
**        STEP -05- SET B1=1 AND RETURN TO CALLER.
* 
 SBT5     SB1    1
          JP     SBYTE       RETURN WITH B1 = 1 
          EJECT 
 SEARCH   TITLE  SEARCH - SEARCH RANDOM FILE INDEX FOR A NAME.
**        SEARCH - SEARCH INDEX BUFFER FOR NAME CONTAINED IN X1.
* 
*         G. L. GOLDEN. 76/12/08. ADAPTED FOR MALET FROM ORD. 
* 
*         ENTRY   (X1) = NAME TO SEARCH FOR.
* 
*         EXIT    (X6) = 0 IF FOUND.
*                 (X2) = 0 IF EMPTY ENTRY 
*                 (B5) = ADDRESS OF ENTRY.
*                 (B7) = 0 IF END OF INDEX REACHED AND NOT FOUND. 
*                 (X1) = MODULE NAME
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  INDEX - INDEX BUFFER.
*                            PURA  - PURGED MODULE NAME.
* 
*         USES   A - 2, 3.
*                X - 1, 2, 3, 6, 7. 
*                B - 4, 5, 6, 7.
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- INITIALIZE (B4) = 0, (B5) = INDEX +1, (B6) = LAST 
*                   NAME, (X3) = PURGED FILE  NAME THEN STEP 2. 
* 
 SEARCH   DATA   0
          SB4    B0 
          SB5    INDEX+1
          SB6    B5+LINDEX
          SB7    2
          SA3    PURA        GET PURGED FILE NAME 
          LX1    36          POSITION NAME TO LOWER 36 BITS 
  
**        STEP -02- GET MODULE NAME IF PURGED THEN STEP 3, IF EMPTY 
*                   THEN STEP 4, IF MATCH THEN STEP 4, ELSE STEP 3. 
* 
 SEA1     SA2    B5 
          MX5    24 
          BX2    -X5*X2      CLEAR LOCK INFORMATION FROM NAME 
          BX6    X2-X1
          BX7    X3-X2
          ZR     X7,SEA2     IF PURGED ENTRY
          ZR     X2,SEA3     IF ENTRY EMPTY 
          ZR     X6,SEA3     IF NAME FOUND
  
**        STEP -03- INCREMENT (B5) BY 2 IF NOT DONE THEN STEP 2, ELSE 
*                   SET (B7) TO ZERO THEN STEP 4. 
* 
 SEA2     SB5    B5+B7
          SB4    B1+B4
          LT     B5,B6,SEA1  IF INDEX FILE NOT SEARCH TO END
          SB7    B0          FLAG FILE FULL/NOT FOUND 
  
**        STEP -04- RETURN. 
* 
 SEA3     EQ     SEARCH 
          EJECT 
 SVREG    TITLE  SVREG - SAVE/RESTORE (B) AND (X) REGISTERS.
**        SVREG  - SAVE/RESTORE (B) AND (X) REGISTERS.
* 
*         J. E. SIPPER. 76/12/08. 
*         G. L. GOLDEN. 76/12/08. 
* 
*         ENTRY  (B1) = 0 SAVE REGISTERS. 
*                (B1) = 1 RESTORE REGISTERS.
* 
*         EXIT   (B1) = 1.
*                (X0-X7) = RESTORED TO ENTRY CONTENTS.
*                (B2-B7) = RESTORED TO ENTRY CONTENTS.
* 
*         ROUTINES CALLED -  NONE.
* 
*         DATA AREAS USED -  SVRB1-SVRBUF7 - SAVE REGISTER BUFFER.
* 
*         USES   A - 1, 2, 3, 4, 5, 6, 7. 
*                X - 0, 1, 2, 3, 4, 5, 6, 7.  (RESTORED)
*                B - 1, 2, 3, 4, 5, 6, 7.     (RESTORED)
* 
*         MESSAGES   NONE.
* 
  
**        STEP -01- IF B1 NON ZERO THEN STEP 2, ELSE SAVE REGISTERS 
*                   THEN STEP 03. 
* 
 SVREG    DATA   0
          NZ     B1,SVR1     IF RESTORE REGISTERS 
          SB1    1
          SA6    SVRBUF6     SAVE X6
          SA7    A6+B1       SAVE X7
          SX6    B2 
          SX7    B3 
          SA6    SVRB2       SAVE B2
          SA7    A6+B1       SAVE B3
          SX6    B4 
          SX7    B5 
          SA6    A7+B1       SAVE B4
          SA7    A6+B1       SAVE B5
          SX6    B6 
          SX7    B7 
          SA6    A7+B1       SAVE B6
          SA7    A6+B1       SAVE B7
          BX6    X0 
          BX7    X1 
          SA6    A7+B1       SAVE X0
          SA7    A6+B1       SAVE X1
          BX6    X2 
          BX7    X3 
          SA6    A7+B1       SAVE X2
          SA7    A6+B1       SAVE X3
          BX6    X4 
          BX7    X5 
          SA6    A7+B1       SAVE X4
          SA7    A6+B1       SAVE X5
          EQ     SVR2        GO TO RESTORE (X5) AND (X6)
  
**        STEP -02- RESTORE REGISTERS THEN STEP 3.
* 
 SVR1     SA1    SVRB2
          SA2    A1+B1
          SA3    A2+B1
          SA4    A3+B1
          SA5    A4+B1
          SB2    X1          RESTORE B2 
          SB3    X2          RESTORE B3 
          SB4    X3          RESTORE B4 
          SB5    X4          RESTORE B5 
          SB6    X5          RESTORE B6 
          SA1    A5+B1
          SB7    X1          RESTORE B7 
          SA1    A1+B1
          BX0    X1          RESTORE X0 
          SA1    A1+B1       RESTORE X1 
          SA2    A1+B1       RESTORE X2 
          SA3    A2+B1       RESTORE X3 
          SA4    A3+B1       RESTORE X4 
  
**        STEP -03- RESTORE (X5) AND (X6) THEN RETURN.
* 
 SVR2     SA5    SVRBUF6
          BX6    X5          RESTORE X6 
          SA5    A5+B1
          BX7    X5          RESTORE X7 
          SA5    SVRBUF5     RESTORE X5 
          EQ     SVREG       RETURN 
  
 SVRB1    DATA   0           B1 
 SVRB2    DATA   0           B2 
 SVRB3    DATA   0           B3 
 SVRB4    DATA   0           B4 
 SVRB5    DATA   0           B5 
 SVRB6    DATA   0           B6 
 SVRB7    DATA   0           B7 
 SVRBUF0  DATA   0           X0 
 SVRBUF1  DATA   0           X1 
 SVRBUF2  DATA   0           X2 
 SVRBUF3  DATA   0           X3 
 SVRBUF4  DATA   0           X4 
 SVRBUF5  DATA   0           X5 
 SVRBUF6  DATA   0           X6 
 SVRBUF7  DATA   0           X7 
          EJECT 
 UPS      TITLE  UPS - MOVE SOURCE DATA FROM PACKED POSITION. 
**        UPS - MOVE SOURCE DATA FROM PACKED POSITION.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         ENTRY   SOURCE DATA IS PACKED POSITION. 
*                 MODULE HEADER BLOCK HAS LENGTH AND ADDRESS OF SOURCE. 
* 
*         EXIT    SOURCE DATA MOVED TO SOURCE POSITION. 
* 
*         ROUTINES CALLED -  FILL    - FILL BUFFER AREA WITH DATA.
*                            BLK     - BLANK FILL REGISTER. 
* 
*         DATA AREAS USED -  MODULE  - MODULE BUFFER. 
*                            SOURCE  - SOURCE BUFFER. 
*                            MODNME  - K/L ADDRESS FOR MODULE NAME. 
* 
*         USES   A - 1, 6.
*                X - 1, 2, 5, 6.
*                B - 2, 3, 4, 5, 6. 
* 
*         MESSAGES  NONE. 
* 
  
**        STEP -01- GET MODULE NAME CALL BLK TO BLANK FILL THEN STORE 
*                   INTO K/L DISPLAY BUFFER THEN STEP 2.
* 
 UPS      DATA   0           ENTRY/EXIT 
          SA1    MODULE      GET MODULE NAME
          MX5    36 
          BX1    X5*X1       CLEAR GARBAGE FROM NAME
          RJ     BLK         BLANK FILL MODULE NAME 
          SA6    MODNME      STORE MODULE NAME INTO DISPLAY 
  
**        STEP -02- GET LENGTH OF SOURCE FROM MODULE BUFFER IF ZERO 
*                   STEP 6, ELSE STEP 3.
* 
          SA1    MODULE+3    GET SOURCE CONTROL WORD WITHIN MODULE
          BX2    X1 
          LX2    59-35
          MX5    12 
          BX2    X5*X2       X2 = LENGTH OF SOURCE BUFFER WITHIN MODULE 
          LX2    12          MOVE LENGTH TO LOWER 12 BITS 
          ZR     X2,UPS3     IF SOURCE NOT PRESENT
  
**        STEP -03- GET FWA OF PACKED SOURCE IF ALLREADY IN CORRECT 
*                   POSITION THEN STEP 5, ELSE STEP 4.
* 
          SX2    X2-1        (X2) = LENGTH - 1
          LX1    36 
          BX1    X1*X5
          LX1    12          X1 = ADDRESS OF NEW SOURCE IN MODULE 
          SB4    X1+MODULE   (B4) = FWA READ SOURCE 
          SB6    B4+X2       (B6) = LWA READ SOURCE 
          SB2    X2+SOURCE   (B2) = LWA WRITE SOURCE
          SB5    SOURCE      (B5) = FWA WRITE SOURCE
          EQ     B4,B5,UPS2  SOURCE IS POSITIONED CORRECTLY 
  
**        STEP -04- MOVE SOURCE DATA THEN STEP 5. 
* 
 UPS1     SA1    B6          GET SOURCE WORD
          BX6    X1 
          SA6    B2          STORE SOURCE WORD
          SB6    B6-B1
          SB2    B2-B1
          LE     B4,B6,UPS1  IF MOVE SOURCE NOT DONE
  
**        STEP -05- BLANK FILL REMAINDER OF SOURCE BUFFER THAT DOES 
*                   HAVE VALID SOURCE DATA THEN STEP 6. 
* 
 UPS2     SA1    BLANKS      GET BLANK WORD 
          SB2    X2+SOURCE+1 (B2) = FWA+1 OF END OF SOURCE BUFFER 
          SB3    B5+LSOURCE-1 
          RJ     FILL        BLANK FILL END OF SOURCE BUFFER
  
**        STEP -06- RETURN. 
* 
 UPS3     EQ     UPS         RETURN 
          EJECT 
 WRSFILE  TITLE  WRSFILE - WRITE MODULE ON RANDOM FILE. 
**        WRSFILE - WRITE MODULE ON RANDOM FILE.
* 
*         G. L. GOLDEN. 76/12/08. 
* 
*         WRITE THE MODULE ON THE RANDOM FILE FROM THE MODULE BUFFER. 
* 
*         ENTRY  MODULE = CONTAINS THE COMPILED BINARY OF THE MODULE. 
*                FLOG   = 1 DONT LOG MESSAGES.
*                FLOG   = 0 LOG MESSAGES. 
* 
*         EXIT   INDEX UPDATED WITH NEW MODULE NAME.
*                MODULE WRITTEN ONTO RFILE. 
*                LOCK TABLE UPDATED IF MODULE LOCKED. 
*                FRFILE = 1 IF WRITE DONE ON RANDOM FILE. 
* 
*         ROUTINES CALLED -  CHKSUM - MODULE CHECKSUM UTILITY.
*                            UPS    - REPOSITION SOURCE BUFFER. 
*                            POST   - POST MESSAGES.
*                            CVTDIS - CONVERT TO OCTAL DISPLAY CODE.
*                            SEARCH - SEARCH INDEX FOR MODULE NAME. 
* 
*         DATA AREAS USED -  MODULE - MODULE BUFFER.
*                            INDEX  - INDEX BUFFER. 
*                            RECNM  - RECORD NAME.
*                            FRUN   - RUNNING FLAG. 
*                            FSFILE - FILE OPEN FLAG. 
*                            WBIT   - W BIT FOR FET ON NOS. 
*                            FDIS   - DISPLAY TYPE FLAG.
*                            FRFILE - FLAG FOR WRITE DONE ON FILE.
* 
*         USES   A - 1, 2, 3, 4, 5, 6, 7. 
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 2. 
* 
*         MESSAGES   MODULE WRITTEN = MNENNN. 
*                    POST    WHEN MODULE RUNNING. 
*                    NO NAME FOR MODULE.
* 
  
**        STEP -01- SEE IF RUNNING IF NOT THEN STEP 2, ELSE STEP 10 
* 
 WRSFILE  DATA   0
          SA5    FRUN 
          NZ     X5,WRS9     IF MODULE RUNNING
  
**        STEP -02- SEE IF NAME PRESENT IF NOT THEN STEP 11, ELSE 
*                   STEP 3. 
* 
          SA2    MODULE      GET RECORD NAME
          MX5    36 
          BX6    X5*X2
          SA6    RECNM       SAVE MODULE NAME 
          ZR     X6,WRS10    IF NO MODULE NAME GIVEN
  
**        STEP -03- REWIND RANDOM FILE, CHECKSUM MODULE, AND SEARCH FOR 
*                   NAME IN THE INDEX TABLE IF TABLE FULL THEN STEP 12, 
*                   ELSE STEP 4.
* 
 WRS1     SB2    B0          SET FLAG FOR STORE OF CHECK SUM
          RJ     CHKSUM      STORE CHECKSUM INTO MODULE 
 WRS2     SA1    RECNM       GET RECORD NAME
          RJ     SEARCH 
          ZR     B7,WRS11A   IF INDEX TABLE FULL
  
**        STEP -04- CHECK FOR LOCK BIT FOR MODULE IF SET THEN STEP 11,
*                   ELSE SET LOCK BIT IF ON IN MODULE THEN STEP 5.
* 
          SA3    B5          GET MODULE NAME
          NG     X3,WRS11    IF MODULE LOCKED 
          SA4    MODULE+3 
          PL     X4,WRS3     IF NEW MODULE NOT LOCKED 
          MX5    1
          BX1    X5+X1       OR LOCK BIT INTO INDEX TABLE NAME
 WRS3     SA3    FCERR
          NZ     X3,WRS3A    IF COMPILER ERRORS 
          SA3    FERR 
          NZ     X3,WRS3A    IF SOURCE OVERFLOW 
          SA3    FEND 
          NZ     X3,WRS4     IF END CARD OK 
 WRS3A    SX5    B1 
          LX5    58 
          BX1    X1+X5       SET BIT 58 INTO INDEX WORD 
  
**        STEP -05- IF NAME IS IN INDEX THEN PURGE MODULE NAME
*                   THEN STEP 3, ELSE STEP 6. 
* 
 WRS4     ZR     X2,WRS5     IF NAME NOT IN INDEX 
          SA1    PURA        GET NAME FOR PURGED MODULES
          BX7    X1 
          SA7    B5          PURGE NAME FROM INDEX TABLE
          EQ     WRS2 
  
          IFEQ   NOSBE,1
**        STEP -06- PLACE MODULE NAME INTO SYSTEM CALL FOR WRITE THEN 
*                   STEP 7. 
* 
 WRS5     BX7    X1 
          SA7    WRS8+2      STORE INDEX NAME 
          ENDIF 
  
          IFEQ   NOS,1
**        STEP -06- STORE FILE NAME INTO INDEX AND CALCULATE LENGTH OF
*                   WRITE THEN STEP 7.
* 
 WRS5     ZR     X6,WRS6     IF REPLACEING OLD ENTRY
          BX6    X1 
          SA6    B5          STORE FILE NAME INTO INDEX TABLE 
          SX6    B5-1 
          MX5    0
          EQ     WRS7 
  
 WRS6     SA5    B5-1        GET INDEX FROM TABLE 
          BX6    X5 
          SA5    WBIT        WBIT IS USED TO TELL SYSTEM WE HAVE PRU
 WRS7     IX6    X6+X5
          SA6    RFILE+6     AND INTO THE FET 
          BX6    X2 
          SA1    MODULE+3 
          MX5    -12
          BX5    -X5*X1 
          SX5    X5+B1       X5 = LENGTH OF MODULE BUFFER + 1 
          ENDIF 
  
          IFEQ   NOSBE,1
**        STEP   -07- COMPUTE LENGTH OF MODULE AND STORE IN FET THEN
*                     WRITE MODULE BUFFER ONTO RANDOM FILE THEN STEP 8. 
* 
          SA1    MODULE+3 
          MX5    -12
          BX6    -X5*X1      X5 = LENGTH OF MODULE BUFFER 
          SX6    X6+MODULE+1 ADD LENGTH TO FWA OF MODULE
          SA1    RFILE+5
          BX1    X5*X1       CLEAR LOWER BITS OF X1 
          BX6    X1+X6
          SA6    A1          STORE MODULE LENGTH INTO FET 
          ENDIF 
  
          IFEQ   NOS,1
**        STEP -07- WRITE MODULE ONTO RANDOM FILE THEN STEP 8.
* 
          WRITEW RFILE,MODULE,X5
          WRITER RFILE,R
          ENDIF 
  
          IFEQ   NOSBE,1
 WRS8     WRITOUT RFILE,/Z/ 
          WRITER  RFILE,,RECALL 
          SX6    MODULE+LMODULE 
          SA1    RFILE+5
          MX5    48 
          BX1    X5*X1
          BX6    X6+X1
          SA6    A1          STORE MAX MODULE LENGTH INTO FET 
          ENDIF 
  
**        STEP -08- STORE MODULE NAME INTO MESSAGE THEN MOVE SOURCE TO
*                   UNPACKED POSITION, POST MESSAGE (MODULE WRITTEN ON
*                   RFILE) IF LOG FLAG ZERO THEN STEP 14. 
* 
          SX6    B1 
          SA6    FRFILE      FLAG WRITE ON RANDOM FILE DONE 
          SA1    MODULE 
          MX6    36 
          BX6    X6*X1
          SA6    MSGE26A
          SA1    FLOG 
          NZ     X1,WRS13    IF DONT LOG MESSAGE
          SB2    MSGE26      MSG ( MODULE WRITTEN =    MNENNNN) 
          EQ     WRS12
  
**        STEP -09- SET INDEX TO ( ILLEGAL WHEN MODULE RUNNING) THEN
*                   STEP 13.
* 
 WRS9     SB2    MSGE7       MALET RUNNING
          EQ     WRS12
  
**        STEP -10- SET INDEX TO ( NO MODULE NAME)THEN STEP 13. 
* 
 WRS10    SB2    MSGE8       NO MODULE NAME 
          EQ     WRS12
  
**        STEP -11- SET INDEX TO ( MODULE LOCKED USE NEW NAME) THEN 
*                   STEP 13.
* 
 WRS11    SB2    MSGE30 
          EQ     WRS12
  
**        STEP -12- SET INDEX TO ( RANDOM FILE FULL = NAME) THEN
*                   STEP 13.
* 
 WRS11A   SA1    RECNM
          BX6    X1 
          SA6    MSGE10A
          SB2    MSGE10 
          SA1    FKL
          NZ     X1,WRS12    IF KL DISPLAY ON 
          SA1    FTERM
          NZ     X1,WRS12    IF TERMINAL MODE 
          RJ     MSG         RANDOM FILE FULL TO DAYFILE
          SX6    B1 
          SA6    FDROP       FLAG DROP TIME 
  
**        STEP -13- POST MESSAGE. 
* 
 WRS12    RJ     POST        SEND MESSAGE TO USER 
          RJ     UPS
  
**        STEP -14- RETURN TO CALLER. 
* 
 WRS13    EQ     WRSFILE     RETURN 
  
          IFEQ   NOS,1,1
 WBIT     DATA   4000000000B WBIT 
  
 RECNM    DATA   0           RECORD NAME
 WRSDUP   DATA   0           DUPLICATE MODULE NAME RE-NAME VALUE
          TITLE 
          EJECT 
          USE    // 
 OVAREA   BSS    0
          BSS    5                 SPACE FOR OVERLAY TABLE
 ENTRIES  SET    0
*CALL MALNK10 
*CALL MALNK11 
*CALL MALNK12 
          ORG    CLRSW
*CALL MALNK20 
          ORG    *
          ORG    CLRSW
*CALL MALNK30 
          ORG    *
          ORG    CLRSW
 XREFG    LINK
          ORG    *
          USE    *
          END    MALET
