Google
 

Trailing-Edge - PDP-10 Archives - AP-D471B-SB_1978 - mgnms2.bli
There are no other files named mgnms2.bli in the archive.
!***COPYRIGHT (C) 1974, 1975, 1976, 1977 DIGITAL EQUIPMENT CORP., MAYNARD, MASS.***

! ***	LAST MODIFIED BY	ILG	ON	30 DEC 76

MODULE MIS2(SREG = #17, FREG = #16,  VREG = #15,
MLIST,TIMER=EXTERNAL(SIX12),FSAVE)=
BEGIN

GLOBAL BIND MS2 = 2;

REQUIRE MGNMAC.BLI;
REQ(MGNEXT);
REQ(MGNMC2);

OWN	MALL;

EXTERNAL
	PUTBLK,
	PUTWORD,
	GETBLK,
	GETWORD,
	SIBSAMENAME,
	TRCODESAME,
	MPRSAMENAME,
	MAKTRCODE;

BIND	SYSNAMELEN = 24 %CHARACTERS% ,
	SYSNAMESIZE = SYSNAMELEN / 5 + 1,
	MC0LEN = 8 %CHARACTERS%,
	MC0SIZE = MC0LEN / 5 + 1;

EXTERNAL			! EXTERNAL ROUTINES

	MAKEMISC,
	DELPSWRDS;

EXTERNAL
	MISCDEFFLAG,
	ERRLEAF,
	ERRMPR,
	TRCLEN,
	TRCSIZE,

	SYSNAME,

	MAXSLOTS,
	PASSWORDS,
	PBQUOTA,
	MC0ALL,
	MC0DFERRED,
	MC0IMMEDIATE,
	MC0DFAULT,

	SOT,
	SOTRC,
	TRCDL,
	TRCDLC,
	SDMOQ,

	GOTCODE,
	SON,				! NOTE SON,SOFF,RDM, & RDMC ARE NOT QUITE CORRECT
	SOFF,
	RDM,
	RDMC,



	INJOURNALLING,
	OUTJOURNALLING,
	JSPEC1,
	JSPEC2,

	MPPLOGGING,
	MSPEC1,
	MSPEC2,

	FAILSOFT,
	ROLLING,
	FSFILESPEC,
	FSSIZE,

	ESI,
	EMI,
	EGI,
	EPI;
FORWARD
	DSYSNAME, DMAXSLOTS, DPASSWORDS, DPBQUOTA, DMCLASS,
	DMC0DFAULT,DSOT,DSOTRC, DTRCLEN,DTRCDL,
	 DSDMOQ, DTRCODES,
	DJOURNALLING, DINJOURNALLING, DOUTJOURNALLING, DJSPECS,
	DMLOGGING, DFAILSOFT, DROLLING, DFAILFILE, DCODES,
	DFAILSIZE ;

GLOBAL ROUTINE DISPMISC =
    BEGIN
	IF NOT NULL( PRIM, N0NAMELEN * MAXLEVEL ) THEN
	    BEGIN
		ERROR( 94 );			% GARBAGE AFTER THE COMMAND%
		RETURN
	    END;

	IF NOT .MISCDEFFLAG THEN
	    BEGIN
		OUTPUT( 'MISCELLANOUS INFORMATION UNDEFINED, PLEASE MAKE?M?J' );
		RETURN
	    END;

	DSYSNAME();

	DMAXSLOTS();

	DPASSWORDS();

	DJOURNALLING();

	IF .INJOURNALLING OR .OUTJOURNALLING THEN DJSPECS();

	DMLOGGING();

	DFAILSOFT();

	DROLLING();

	DFAILFILE();

	DFAILSIZE();

	DMCLASS();

	DMC0DFAULT();

	DSDMOQ();

	DPBQUOTA();

	DSOTRC();

	DTRCLEN();

	DTRCDL();

	DSOT();

	DTRCODES();

	DCODES();

	OUTPUTCRLF;
	OUTPUTCRLF

    END;

ROUTINE DSYSNAME =
    BEGIN
	OUTPUT( 'NAME OF THE SYSTEM:	' );
	XOUTPUT( SYSNAME );
	OUTPUTCRLF

    END;

ROUTINE DMAXSLOTS =
    BEGIN
	OUTPUT( 'MAXIMUM NUMBER OF JOB SLOTS FOR MCS:	' );
	OUTPUTD( .MAXSLOTS );
	OUTPUTCRLF

    END;


ROUTINE DPASSWORDS =
    BEGIN
	REGISTER PSWRDPTR;
	MAP	FORMAT PSWRDPTR;

	OUTPUT( 'PASSWORDS:	' );
	IF .PASSWORDS EQL 0 THEN
		OUTPUT( '<NONE>?M?J' )
	    ELSE
	    BEGIN
		PSWRDPTR _ .PASSWORDS<FORE>;
		WHILE .PSWRDPTR NEQ 0 DO
		    BEGIN
			XOUTPUT( PSWRDPTR[PW0WORD] );
			OUTPUTCRLF;
			PSWRDPTR _ .PSWRDPTR[PW0FORE];
			IF .PSWRDPTR NEQ 0 THEN	OUTPUT( '		' )
		    END
	    END

    END;

ROUTINE DPBQUOTA =
    BEGIN
	OUTPUT( 'DEFERRED MESSAGE (PIGGYBACK) QUOTA:	' );
	OUTPUTD( .PBQUOTA );
	OUTPUTCRLF

    END;

ROUTINE DMCLASS =
    BEGIN
	OUTPUT( 'MESSAGE CLASS CODES:?M?J' );
	OUTPUT( '	ALL:	' );
	IF .MC0ALL NEQ 0 THEN
		XOUTPUT( MC0ALL<36, 7> )
	    ELSE OUTPUT( '<NONE>' );
	OUTPUTCRLF;

	OUTPUT( '	DEFERRED:	' );
	IF .MC0DFERRED NEQ 0 THEN
		XOUTPUT( MC0DFERRED<36, 7> )
	    ELSE OUTPUT( '<NONE>' );
	OUTPUTCRLF;

	OUTPUT( '	IMMEDIATE:	' );
	IF .MC0IMMEDIATE NEQ 0 THEN
		XOUTPUT( MC0IMMEDIATE<36, 7> )
	    ELSE OUTPUT( '<NONE>' );
	OUTPUTCRLF

    END;

ROUTINE DMC0DFAULT =
    BEGIN
	OUTPUT( 'DEFAULT MESSAGE CLASS:	' );
	XOUTPUT( CASE .MC0DFAULT OF
			SET
			    %0%	PAZ 'IMMEDIATE';
			    %1% PAZ 'DEFERRED';
			    %2% PAZ 'ALL';
			TES  );
	OUTPUTCRLF

    END;

ROUTINE DSOT =
    BEGIN
	OUTPUT( 'STARTING POSITION OF MSG TXT:	' );
	OUTPUTD( .SOT );
	OUTPUTCRLF

    END;

ROUTINE DSOTRC =
    BEGIN
	OUTPUT( 'TRCODE STARTING POSITION:	' );
	OUTPUTD( .SOTRC );
	OUTPUTCRLF

    END;

ROUTINE DTRCLEN =
    BEGIN
	OUTPUT( '	LENGTH:		' );
	OUTPUTD( .TRCLEN );
	OUTPUTCRLF

    END;

ROUTINE DTRCDL =
    BEGIN
	OUTPUT( '	DELIMITER:	' );
	IF .TRCDL THEN
		OUTPUTBITS( TRCDLC, 1 )
	    ELSE OUTPUT( '<NONE>' );
	OUTPUTCRLF

    END;

ROUTINE DSDMOQ =
    BEGIN
	OUTPUT( 'SIGNON DEFERRED MESSAGE OUTPUT QUOTA:	' );
	OUTPUTD( .SDMOQ );
	OUTPUTCRLF

    END;

ROUTINE DTRCODES =
    BEGIN
	MAP	FORMAT SON;
	MAP	FORMAT SOFF;
	MAP	FORMAT RDM;
	MAP	FORMAT RDMC;

	OUTPUT('TRANSACTION CODES FOR:?M?J');

	OUTPUT( '	SIGNON:	' );
	IF .SON EQL 0 THEN OUTPUT('<NONE>') ELSE
	OUTPUTBITS( SON[ TR0CODE ], .SON[ TR0CHAR ] );
	OUTPUTCRLF;
	OUTPUT( '	SIGNOFF:	' );
	IF .SOFF EQL 0 THEN OUTPUT('<NONE>') ELSE
	OUTPUTBITS( SOFF[ TR0CODE ], .SOFF[ TR0CHAR ] );
	OUTPUTCRLF;
	OUTPUT( '	REQUEST DEFERRED MESSAGES:	' );
	IF .RDM EQL 0 THEN OUTPUT('<NONE>') ELSE
	OUTPUTBITS( RDM[ TR0CODE ], .RDM[ TR0CHAR ] );
	OUTPUTCRLF;
	OUTPUT( '	REQUEST DEFERRED MESSAGE COUNT:	' );
	IF .RDMC EQL 0 THEN OUTPUT('<NONE>') ELSE
	OUTPUTBITS( RDMC[ TR0CODE ], .RDMC[ TR0CHAR ] );
	OUTPUTCRLF
    END;

ROUTINE DJOURNALLING =
    BEGIN
	DINJOURNALLING();
	DOUTJOURNALLING()
    END;

ROUTINE DINJOURNALLING =
    BEGIN
	IF NOT .INJOURNALLING THEN OUTPUT( 'NO ' );
	OUTPUT( 'INPUT MESSAGE JOURNALLING TO BE DONE' );
	OUTPUTCRLF

    END;

ROUTINE DOUTJOURNALLING =
    BEGIN
	IF NOT .OUTJOURNALLING THEN OUTPUT( 'NO ' );
	OUTPUT( 'OUTPUT MESSAGE JOURNALLING TO BE DONE' );
	OUTPUTCRLF

    END;

ROUTINE SPECNOTNULL( SPEC ) =
    BEGIN
	INCR I FROM 0 TO SPECBLKLEN - 1 DO
		IF .(.SPEC)[.I] NEQ 0 THEN RETURN TRUE;
	FALSE
    END;

ROUTINE DJSPECS =
    BEGIN

	OUTPUT( 'JOURNALLING FILES:	' );
	IF SPECNOTNULL( JSPEC1 ) THEN OUTPUTFSPEC( JSPEC1 )
	    ELSE OUTPUT( '<NONE>' );
	OUTPUTC( "," );
	IF SPECNOTNULL( JSPEC2 ) THEN OUTPUTFSPEC( JSPEC2 )
	    ELSE OUTPUT( '<NONE>' );
	OUTPUTCRLF
    END;

ROUTINE DMLOGGING =
    BEGIN
	IF NOT .MPPLOGGING THEN OUTPUT( 'NO ' );
	OUTPUT( 'MPP LOGGING TO BE DONE' );
	OUTPUTCRLF;

	IF NOT .MPPLOGGING THEN RETURN;

	OUTPUT( 'MPP LOGGING FILE:	' );
	IF SPECNOTNULL( MSPEC1 ) THEN OUTPUTFSPEC( MSPEC1 )
	    ELSE OUTPUT( '<NONE>' );
	OUTPUTC( "," );
	IF SPECNOTNULL( MSPEC2 ) THEN OUTPUTFSPEC( MSPEC2 )
	    ELSE OUTPUT( '<NONE>' );
	OUTPUTCRLF
    END;

ROUTINE DFAILSOFT =
    BEGIN
	IF NOT .FAILSOFT THEN OUTPUT( 'NO ' );
	OUTPUT( 'FAILSOFTING TO BE DONE' );
	OUTPUTCRLF

    END;

ROUTINE DROLLING =
    BEGIN
	IF NOT .ROLLING THEN OUTPUT( 'NO ' );
	OUTPUT( 'ROLLOUT TO BE DONE' );
	OUTPUTCRLF

    END;

ROUTINE DFAILFILE =
    BEGIN
	IF .FAILSOFT OR .ROLLING THEN
	    BEGIN
		OUTPUT( 'FAILSOFT/ROLLOUT FILE:	' );
		OUTPUTFSPEC( FSFILESPEC );
		OUTPUTCRLF
	    END

    END;

ROUTINE DFAILSIZE =
    BEGIN
	OUTPUT( 'FAILSOFT/ROLLOUT FILE INITIAL SIZE:  ' );
	OUTPUTD ( IF .FSSIZE GEQ 0 THEN .FSSIZE/1152 ELSE -.FSSIZE/1152);
	OUTPUT(' SECTIONS');
	OUTPUTCRLF;
	IF .FSSIZE GEQ 0 THEN OUTPUT('FAILSOFT/ROLLOUT FILE IS EXTENDABLE')
	   ELSE OUTPUT('FAILSOFT/ROLLOUT FILE IS NOT EXTENDABLE');
	OUTPUTCRLF
    END;

ROUTINE DCODES =
    BEGIN
	OUTPUT( 'ASCII TRANSMISSION CODES:?M?J' );
	OUTPUT( '	ESI = ' );
	OUTPUTO( .ESI );
	OUTPUTCRLF;

	OUTPUT( '	EMI = ' );
	OUTPUTO( .EMI );
	OUTPUTCRLF;

	OUTPUT( '	EGI = ' );
	OUTPUTO( .EGI );
	OUTPUTCRLF;

	OUTPUT( '	EPI = ' );
	OUTPUTO( .EPI );
	OUTPUTCRLF

    END;
FORWARD
	TELLMISCCHANGES, MMALL,
	MMSYSNAME, MMMAXSLOTS, MMPASSWORDS, MMPBQUOTA, MMMCLASS,
	MMMC0DFAULT, MMSOT, MMSOTRC, MMTRCLEN, MMTRCDL,
	MMSDMOQ, MMTRCODES,
	MMJOURNALLING, MMINJOURNALLING, MMOUTJOURNALLING, MMJSPECS,
	MMMLOGGING, MMFAILSOFT, MMROLLING, MMFAILFILE, MMCODES, 
	MMFAILSIZE ;

COMMENT;

! ROUTINE MODIMISC
! ======= =======
! THIS ROUTINE ASKS FOR THE CHANGES TO BE MADE TO MISC INFO

GLOBAL ROUTINE MODIMISC =
    BEGIN
	OWN	DONE;

	%LOCAL% ROUTINE SETDONE = DONE _ TRUE;

	MALL _ FALSE;

	IF NOT NULL( PRIM, N0NAMELEN * MAXLEVEL ) THEN
	    BEGIN
		ERROR( 94 );			% GARBAGE AFTER THE COMMAND%
		RETURN
	    END;

	IF NOT .MISCDEFFLAG THEN			! IF UNDEFINED THEN
	    BEGIN
		MAKEMISC()					! MAKE IT
	    END
	    ELSE
	    BEGIN
		DONE _ FALSE;
		WHILE NOT .DONE DO				! OTHERWISE, UNTIL THE USER GIVES US A LONE <CR> DO
		    BEGIN
			ASKSTR( '[CHANGE:	??]',		! ASK WHAT CHANGES
				PLIT(	ASCII '??',	TELLMISCCHANGES,
					ASCII 'SYSNA',	MMSYSNAME,
					ASCII 'MAXSL',	MMMAXSLOTS,
					ASCII 'PASSW',	MMPASSWORDS,
					ASCII 'JOURN',	MMJOURNALLING,
					ASCII 'MLOGG',	MMMLOGGING,
					ASCII 'FAILS',	MMFAILSOFT,
					ASCII 'ROLLI',	MMROLLING,
					ASCII 'FAILF',	MMFAILFILE,
					ASCII 'SIZEF',	MMFAILSIZE,
					ASCII 'MCLAS',	MMMCLASS,
					ASCII 'MCDEF',	MMMC0DFAULT,
					ASCII 'SDMOQ',	MMSDMOQ,
					ASCII 'PBQUO',	MMPBQUOTA,
					ASCII 'SOTRC',	MMSOTRC,
					ASCII 'TRCLE',	MMTRCLEN,
					ASCII 'TRCDE',	MMTRCDL,
					ASCII 'SOT',	MMSOT,
					ASCII 'TRCOD',	MMTRCODES,
					ASCII 'CODES',	MMCODES,
					ASCII 'ALL',	MMALL,
					0,		SETDONE),
				0 );
			CRLF
		    END
	    END
    END;
COMMENT;

! ROUTINE TELLMISCCHANGES
! ======= ===============
! THIS ROUTINE TELLS ( WITH LOTS OF WIND ) WHAT CHANGES CAN BE MADE ON
! MISC INFO

ROUTINE TELLMISCCHANGES =
    BEGIN
	TYPE( 'TYPE [SYSNAME] TO CHANGE THE SYSTEM NAME[(,)]?J
?MTYPE [MAXSLOTS] TO CHANGE THE NUMBER OF JOBSLOTS[(,)]?J
?MTYPE [PASSWORDS] TO CHANGE THE PASWORDS[(,)]?J
?MTYPE [JOURNALLING] TO CHANGE THE JOURNALLING[(,)]?J
?MTYPE [MLOGGING] TO CHANGE THE MPP TRAFFIC LOGGING[(,)]?J
?MTYPE [FAILSOFTING] TO CHANGE THE FAILSOFTING FLAG[(,)]?J
?MTYPE [ROLLING] TO CHANGE THE ROLLING FLAG[(,)]?J
?MTYPE [FAILFILE] TO CHANGE THE FAILSOFT FILE SPEC[(,)]?J
?MTYPE [SIZEFAIL] TO CHANGE THE FAILSOFT FILE SIZE[(,)]?J
?MTYPE [MCLASS] TO CHANGE THE MESSAGE CLASS CODES[(,)]?J
?MTYPE [MCDEFAULT] TO CHANGE THE MESSAGE CLASS DEFAULT[(,)]?J
?MTYPE [SDMOQ] TO CHANGE THE SIGNON DEFERRED MESSAGE OUTPUT QUOTA[(,)]?J
?MTYPE [PBQUOTA] TO CHANGE THE PIGGY BACK OUTPUT QUOTA[(,)]?M?J' );
TYPE('?MTYPE [SOTRC] TO CHANGE THE STARTING POSITION OF THE TRANSACTION CODE FIELD[(,)]?J
?MTYPE [TRCLENGTH] TO CHANGE THE MAXIMUM LENGTH OF THE TRANSACTION CODE FIELD[(,)]?J
?MTYPE [TRCDELIMITER] TO CHANGE THE DELIMITER CHARACTER OF THE TRANSACTION CODE FIELD[(,)]?J
?MTYPE [SOT] TO CHANGE THE START OF TEXT[(,)]?J
?MTYPE [TRCODE] TO CHANGE THE TRANSACTION CODES FOR SIGNON, SIGNOFF, REQUEST DEFERRED MESSAGES, AND' );
	TYPE ( ' REQUEST DEFERRED MESSAGE COUNT[(,)]?J
?MTYPE [CODES] TO CHANGE THE ASCII TRANSMISSION CODES FOR THE END INDICATORS[(,)]?J
?MTYPE [ALL] TO CHANGE ALL OF THE ABOVE[,]?J
?MTYPE A CARRIAGE RETURN TO FINISH CHANGING THIS MPP[(?R(<CR> WHEN DONE?R))]');
	CRLF
    END;

COMMENT;

! ROUTINE MMALL
! ======= ========
! THIS ROUTINE ASKS ALL THE QUESTIONS TO CHANGE MISC INFO

ROUTINE MMALL =
    BEGIN
	MALL _ TRUE;

	MMSYSNAME();

	MMMAXSLOTS();


	MMPASSWORDS();

	MMJOURNALLING();

	MMMLOGGING();

	MMFAILSOFT();

	MMROLLING();

	MMFAILFILE();

	MMFAILSIZE();

	MMMCLASS();

	MMMC0DFAULT();

	MMSDMOQ();

	MMPBQUOTA();

	MMSOTRC();

	MMTRCLEN();

	MMTRCDL();

	MMSOT();

	MMTRCODES();

	MMCODES()

    END;

ROUTINE MMSYSNAME =
    BEGIN
	LOCAL	NEWSYSNAME[SYSNAMESIZE];

	IF .SHOW THEN DSYSNAME();
	IF ( ASKCHARS( '[NEW NAME OF THE SYSTEM]?R(,<CHARACTER-STRING>?R)[:	??]',
		NEWSYSNAME,
		SYSNAMELEN ) ) EQL CRONLY THEN RETURN;

	! ELSE !

	MOVE( %FROM% NEWSYSNAME, %TO% SYSNAME, SYSNAMESIZE %WORDS% )

    END;

ROUTINE MMMAXSLOTS =
    BEGIN
	OWN	NEWMAXSLOTS;

	IF .SHOW THEN DMAXSLOTS();
	NEWMAXSLOTS _ ASKDNUM( '[NEW MAX]IMUM NUMBER OF[ JOB SLOTS] FOR MCS?R(,<DECIMAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			1,
			BIGNUMBER );

	IF .NEWMAXSLOTS GEQ 0 THEN MAXSLOTS _ .NEWMAXSLOTS

    END;


ROUTINE MMPASSWORDS =
    BEGIN
	EXTERNAL	STOREPSWRDS;

	IF .SHOW THEN DPASSWORDS();

	IF ( ASKLINE( '[PASSWORDS]?R(,"<NONE>", <NAME>?R)[:	??]' ) ) THEN RETURN;

	! ELSE !

	IF MATCHALINE( NONE ) THEN
	    BEGIN
		DELPSWRDS();
		RETURN
	    END;

	GATHER( ALINE, ACHAR, PRIM, PW0LEN );

	IF NOT EOL( ACHAR ) THEN ERROR( 9 );
	NOTE - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

	IF .PRIM NEQ 0 THEN DELPSWRDS();

	WHILE .PRIM NEQ 0 DO
	    BEGIN
		STOREPSWRDS();
		ASKNAME( '[				??]', PW0LEN)
	    END

    END;

ROUTINE MMPBQUOTA =
    BEGIN
	OWN	NEWPBQUOTA;

	IF .SHOW THEN DPBQUOTA();
	NEWPBQUOTA _ ASKDNUM( '[NEW DEFERRED MESSAGE ]?R(PIGGYBACK?R) QUOTA?R(,<DECIMAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			0,
			BIGNUMBER );

	IF .NEWPBQUOTA GEQ 0 THEN PBQUOTA _ .NEWPBQUOTA

    END;

ROUTINE MMMCLASS =
    BEGIN
	LABEL	LOOP1, LOOP2, LOOP3;

	IF .SHOW THEN DMCLASS();
	TYPE( '[NEW MESSAGE CLASS CODES FOR?M?J]');
LOOP1:	REPEAT
	    BEGIN
		IF NOT ( ASKLINE( '[	ALL]?R(,<NAME>,"<NONE>"?R)[:	??]' ) ) THEN
		    BEGIN
			IF MATCHALINE( NONE ) THEN
			    BEGIN
				ZERO( MC0ALL, MC0ALL + MC0SIZE );
				LEAVE LOOP1
			    END
			    ELSE
			    BEGIN
				GATHER( ALINE, ACHAR, PRIM, MC0LEN );
				IF COMPARE( PRIM, MC0DFERRED, MC0SIZE ) OR COMPARE( PRIM, MC0IMMEDIATE, MC0SIZE ) THEN
				    BEGIN
					ERROR( 118 );
					WARN( 0 )
				    END
				    ELSE
				    BEGIN
					MOVE( PRIM, MC0ALL, MC0SIZE );
					LEAVE LOOP1
				    END
			    END
		    END
		    ELSE LEAVE LOOP1
	    END;

LOOP2:	REPEAT
	    BEGIN
		IF NOT ( ASKLINE( '[	DEFERRED]?R(,<NAME>,"<NONE>"?R)[:	??]' ) ) THEN
		    BEGIN
			IF MATCHALINE( NONE ) THEN
			    BEGIN
				ZERO( MC0DFERRED, MC0DFERRED + MC0SIZE );
				LEAVE LOOP2
			    END
			    ELSE
			    BEGIN
				GATHER( ALINE, ACHAR, PRIM, MC0LEN );
				IF COMPARE( PRIM, MC0ALL, MC0SIZE ) OR COMPARE( PRIM, MC0IMMEDIATE, MC0SIZE ) THEN
				    BEGIN
					ERROR( 118 );
					WARN( 0 )
				    END
				    ELSE
				    BEGIN
					MOVE( PRIM, MC0DFERRED, MC0SIZE );
					LEAVE LOOP2
				    END
			    END
		    END
		    ELSE LEAVE LOOP2
	    END;

LOOP3:	REPEAT
	    BEGIN
		IF NOT ( ASKLINE( '[	IMMEDIATE]?R(,<NAME>,"<NONE>"?R)[:	??]' ) ) THEN
		    BEGIN
			IF MATCHALINE( NONE ) THEN
			    BEGIN
				ZERO( MC0IMMEDIATE, MC0IMMEDIATE + MC0SIZE );
				LEAVE LOOP3
			    END
			    ELSE
			    BEGIN
				GATHER( ALINE, ACHAR, PRIM, MC0LEN );
				IF COMPARE( PRIM, MC0DFERRED, MC0SIZE ) OR COMPARE( PRIM, MC0ALL, MC0SIZE ) THEN
				    BEGIN
					ERROR( 118 );
					WARN( 0 )
				    END
				    ELSE
				    BEGIN
					MOVE( PRIM, MC0IMMEDIATE, MC0SIZE );
					LEAVE LOOP3
				    END
			    END
		    END
		    ELSE LEAVE LOOP3
	    END
    END;

ROUTINE MMMC0DFAULT =
    BEGIN
	%LOCAL% ROUTINE SETIMM =
	    BEGIN
		MC0DFAULT _ 0
	    END;

	%LOCAL% ROUTINE SETDEF =
	    BEGIN
		MC0DFAULT _ 1
	    END;

	%LOCAL% ROUTINE SETALL =
	    BEGIN
		MC0DFAULT _ 2
	    END;

	IF .SHOW THEN DMC0DFAULT();;
	ASKSTR( '[NEW DEFAULT MESSAGE CLASS] IF NONE SPECIFIED BY THE COBOL PROGRAM?R(,IMMEDIATE,DEFERRED,ALL?R)[:	??]',
		PLIT(	ASCII 'IMMED',	SETIMM,
			ASCII 'DEFER',	SETDEF,
			ASCII 'ALL',	SETALL,
			0,		IGNORE ),
		0 )

    END;

ROUTINE MMSOT =
    BEGIN
	OWN	NEWSOT;

	IF .SHOW THEN DSOT();
	NEWSOT _ ASKDNUM( '[NEW STARTING POSITION OF MSG TXT]?R(,<DECIMAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			.SOTRC + .TRCLEN,
			BIGNUMBER );

	IF .NEWSOT GEQ 0 THEN SOT _ .NEWSOT

    END;

ROUTINE MMSOTRC =
    BEGIN
	OWN	NEWSOTRC;

	IF .SHOW THEN DSOTRC();
	NEWSOTRC _ ASKDNUM( '[NEW TRCODE STARTING POSITION]?R(,<DECIMAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			0,
			.SOT - .TRCLEN );

	IF .NEWSOTRC GEQ 0 THEN SOTRC _ .NEWSOTRC

    END;

ROUTINE MMTRCLEN =
    BEGIN
	OWN	NEWTRCLEN;

	IF .SHOW THEN DTRCLEN();
	NEWTRCLEN _ ASKDNUM( '[	NEW LENGTH]?R(,<DECIMAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			1,
			.SOT - .SOTRC );

	IF .NEWTRCLEN GEQ 0 THEN
	    BEGIN
		TRCLEN _ .NEWTRCLEN;
		TRCSIZE _ .TRCLEN / 5 + 2
	    END

    END;

ROUTINE MMTRCDL =
    BEGIN
	OWN
		NEWTRCDL;

	IF .SHOW THEN DTRCDL();
	NEWTRCDL _ ASKYESORNO( '[	DO YOU WANT A DELIMETER]?R(,YES,NO?R)[:	??]', -1 );

	IF .NEWTRCDL EQL -1 THEN RETURN;

	! ELSE !

	TRCDL _ .NEWTRCDL;

	IF .NEWTRCDL EQL YES THEN
		IF ( ASKBITS( '[	NEW DELIMITER]?R(<CHARACTER>?R)[:	??]',
				TRCDLC,
				1 ) ) EQL CRONLY THEN
		    BEGIN
			WARN( 9 );
			TRCDL _ FALSE
		    END;
	IF NOT .TRCDL THEN TRCDLC _ 0

    END;

ROUTINE HISTMMSOTID =
    BEGIN
	OWN	HISTNEWSOTID;

	END;
ROUTINE HISTMMTIDLEN =
    BEGIN
	OWN	HISTNEWTIDLEN;
    END;

ROUTINE HISTMMTIDEL =
    BEGIN
	OWN
		HISTNEWTIDEL;

	END;
ROUTINE MMSDMOQ =
    BEGIN
	OWN	NEWSDMOQ;

	IF .SHOW THEN DSDMOQ();
	NEWSDMOQ _ ASKDNUM( '[NEW SIGNON DEFERRED MESSAGE OUTPUT QUOTA]?R(,<DECIMAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			0,
			BIGNUMBER );

	IF .NEWSDMOQ GEQ 0 THEN SDMOQ _ .NEWSDMOQ

    END;

ROUTINE MMTRCODES =
    BEGIN
	%LOCAL% ROUTINE ASKNEWTRCODE( NAME, TRCODEPTR ) =
	    BEGIN
		REGISTER	TRCODE;

		OWN	FAKEPTR,
			NEWGIVEN;

		MAP	FORMAT TRCODE;
		MAP	ROOTFORMAT FAKEPTR;

		TRCODE _ ..TRCODEPTR;
		MAKTRCODE(.NAME, FAKEPTR, NEWGIVEN);
		IF .NEWGIVEN THEN
		BEGIN
		  PMEM(.TRCODE, .TRCODE[TR0SIZE]);
		  .TRCODEPTR _ .FAKEPTR
		END
		ELSE
		  PMEM(.FAKEPTR, .FAKEPTR[TR0SIZE]);
	  END;
	! BEGIN !

	IF .SHOW THEN DTRCODES();

	TYPE( '[NEW TRCODES FOR:?M?J]' );

	ASKNEWTRCODE( PAZ 'SIGNON ', SON );
	ASKNEWTRCODE( PAZ 'SIGNOFF ', SOFF );
	ASKNEWTRCODE( PAZ 'REQUEST DEFERRED MESSAGE ', RDM );
	ASKNEWTRCODE( PAZ 'REQUEST DEFERRED MESSAGE COUNT ', RDMC )

    END;

COMMENT;
ROUTINE MMJOURNALLING =
    BEGIN
	OWN HIST4;	!USED TO BE NEWJOURNALLING, LEFT FOR "#$%!#$ BIN FILES
	OWN HISTNEWMAXCPS;	!HIST:NEWMAXCPS
	OWN HISTNEWMAXSPM;	!HIST:NEWMAXSPM
	OWN HISTNEWMAXMPG;	!HIST:NEWMAXMPG
	MMINJOURNALLING();
	MMOUTJOURNALLING();
	IF .INJOURNALLING OR .OUTJOURNALLING THEN MMJSPECS()
    END;

ROUTINE MMINJOURNALLING =
    BEGIN
	OWN	NEWINJOURNALLING;

	IF .SHOW THEN DINJOURNALLING();

	NEWINJOURNALLING _ ASKYESORNO( '[INPUT MESSAGE JOURNALLING]?R(,YES,NO?R)[:	??]', -1);
	IF .NEWINJOURNALLING NEQ -1 THEN INJOURNALLING _ .NEWINJOURNALLING

    END;

ROUTINE MMOUTJOURNALLING =
    BEGIN
	OWN	NEWOUTJOURNALLING;

	IF .SHOW THEN DOUTJOURNALLING();

	NEWOUTJOURNALLING _ ASKYESORNO( '[OUTPUT MESSAGE JOURNALLING]?R(,YES,NO?R)[:	??]', -1);
	IF .NEWOUTJOURNALLING NEQ -1 THEN OUTJOURNALLING _ .NEWOUTJOURNALLING

    END;

ROUTINE MMJSPECS =
    BEGIN
	MAP ROOTFORMAT JSPEC1;

	IF .SHOW THEN DJSPECS();
	NEWASK2FSPEC( '[NEW JOURNALLING FILES]?R(<FILE-SPEC-PAIR>?R)[:	??]',
			JSPEC1,
			JSPEC2 );
	WHILE (.JSPEC1[SB0NAME] OR .JSPEC1[SB0DEVICE]) EQL 0 DO
	BEGIN
	  ERROR(127);
	  NEWASK2FSPEC( '[NEW JOURNALLING FILES]?R(<FILE-SPEC-PAIR>?R)[:	??]',
			JSPEC1,
			JSPEC2 )
	END
    END;

ROUTINE MMMLOGGING =
    BEGIN
	OWN	NEWMPPLOGGING;
	MAP	ROOTFORMAT MSPEC1;

	IF .SHOW THEN DMLOGGING();

	NEWMPPLOGGING _ ASKYESORNO( '[MPP LOGGING TO BE DONE]?R(,YES,NO?R)[:	??]', -1);

	IF .NEWMPPLOGGING NEQ -1 THEN MPPLOGGING _ .NEWMPPLOGGING;

	IF .MPPLOGGING THEN
	    BEGIN
		MAP ROOTFORMAT MSPEC1;

		NEWASK2FSPEC( '[MPP LOGGING FILE]?R(<FILE-SPEC-PAIR>?R)[:	??]',
				MSPEC1,
				MSPEC2 );
	  WHILE (.MSPEC1[SB0NAME] OR .MSPEC1[SB0DEVICE]) EQL 0 DO
	  BEGIN
	     ERROR(128);
     	     NEWASK2FSPEC( '[MPP LOGGING FILE]?R(<FILE-SPEC-PAIR>?R)[:	??]',
				MSPEC1,
				MSPEC2 )
	  END
    END

    END;

ROUTINE MMFAILSOFT =
    BEGIN
	OWN
		NEWFAILSOFT;

	IF .SHOW THEN DFAILSOFT();
	NEWFAILSOFT _ ASKYESORNO( '[FAILSOFTING TO BE DONE]?R(,YES,NO?R)[:	??]', -1);

	IF .NEWFAILSOFT NEQ -1 THEN
	    BEGIN
		IF NOT .FAILSOFT AND NOT .ROLLING AND .NEWFAILSOFT AND NOT .MALL THEN
		    BEGIN
			FAILSOFT _ .NEWFAILSOFT;
			MMFAILFILE();
			MMFAILSIZE()
		    END;
	        FAILSOFT _ .NEWFAILSOFT
	    END

    END;

ROUTINE MMROLLING =
    BEGIN
	OWN
		NEWROLLING;

	IF .SHOW THEN DROLLING();
	NEWROLLING _ ASKYESORNO( '[ROLLOUT TO BE DONE]?R(,YES,NO?R)[:	??]', -1);

	IF .NEWROLLING NEQ -1 THEN
	    BEGIN
		IF NOT .FAILSOFT AND NOT .ROLLING AND .NEWROLLING AND NOT .MALL THEN
		    BEGIN
			ROLLING _ .NEWROLLING;
			MMFAILFILE();
			MMFAILSIZE()
		    END;
		 ROLLING _ .NEWROLLING
	    END

    END;

ROUTINE MMFAILFILE =
    BEGIN
	OWN	FILESPEC[ SPECBLKLEN ];

	IF NOT ( .ROLLING OR .FAILSOFT ) THEN RETURN;

	IF .SHOW THEN DFAILFILE();
	IF ( ASKFSPEC( '[FAILSOFT/ROLL FILE ]?R(,"MCS.QQQ", <FILE-SPEC>?R)[:	??]',
		FILESPEC ) ) NEQ CRONLY THEN
		MOVE( FILESPEC, FSFILESPEC, SPECBLKLEN )

    END;

ROUTINE MMFAILSIZE =
    BEGIN
	OWN	NEWFSSIZE;

	IF .SHOW THEN DFAILSIZE();
	NEWFSSIZE _ ASKDNUM( '[NEW INITIAL SIZE IN SECTIONS]?R(<DECIMAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			1,
			56 );

	IF .NEWFSSIZE GEQ 0 THEN 
	     FSSIZE _ 1152 * (IF .FSSIZE GEQ 0 THEN .NEWFSSIZE ELSE -.NEWFSSIZE);

	SELECT ASKYESORNO('[IS FILE EXTENDABLE]?R(YES,NO?R)[:  ??]',-1) OF
	  NSET
		 -1 : ; %DO NOTHING %
		TRUE: IF .FSSIZE LSS 0 THEN FSSIZE _ -.FSSIZE;
	      FALSE : IF .FSSIZE GEQ 0 THEN FSSIZE _ -.FSSIZE;
	  TESN;
    END;

ROUTINE MMCODES =
    BEGIN
	OWN
		NEWESI,
		NEWEMI,
		NEWEGI,
		NEWEPI;

	IF .SHOW THEN DCODES();
	TYPE( 'WHAT ARE THE [NEW ASCII] TRANSMISSION[ CODES] FOR[:?M?J]' );

	NEWESI _ ASKONUM( '[	ESI]?R(,<OCTAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			0,
			127 );

	IF .NEWESI GEQ 0 THEN
	    BEGIN
		ESI _ .NEWESI;
		IF (.ESI EQL .EMI) OR (.ESI EQL .EGI) OR (.ESI EQL .EPI) THEN WARN( 15 )
	    END;

	NEWEMI _ ASKONUM( '[	EMI]?R(,<OCTAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			0,
			127 );

	IF .NEWEMI GEQ 0 THEN
	    BEGIN
		EMI _ .NEWEMI;
		IF (.EMI EQL .ESI) OR (.EMI EQL .EGI) OR (.EMI EQL .EPI) THEN WARN( 15 )
	    END;

	NEWEGI _ ASKONUM( '[	EGI]?R(,<OCTAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			0,
			127 );

	IF .NEWEGI GEQ 0 THEN
	    BEGIN
		EGI _ .NEWEGI;
		IF (.EGI EQL .ESI) OR (.EGI EQL .EMI) OR (.EGI EQL .EPI) THEN WARN( 15 )
	    END;

	NEWEPI _ ASKONUM( '[	EPI]?R(,<OCTAL NUMBER>?R)[:	??]',
			DEFAULTOK,
			-1,
			0,
			127 );

	IF .NEWEPI GEQ 0 THEN
	    BEGIN
		EPI _ .NEWEPI;
		IF (.EPI EQL .ESI) OR (.EPI EQL .EMI) OR (.EPI EQL .EGI) THEN WARN( 15 )
	    END

    END;				! SEMICOLON REQ'D



END;

! END OF MGNMS2.BLI