; File: ION.MAC ; ; This work was supported by the Advanced Research ; Projects Agency of the Office of the Secretary of ; Defense (F44620-73-C-0074) and is monitored by the ; Air Force Office of Scientific Research. ; SET CMUSW==1 FOR A CMU VERSION OF BLISS ; OR ==0 FOR A STANDARD VERSION. THE ; CMU VERSION ACCEPTS THE FUNNY CMU PPN'S ; ; SET BLIS11==1 FOR BLISS 11 COMPILER I/O MODULE (BL11IO) ; OR ==0 FOR BLISS 10 COMPILER I/O MODULE (LOIO) ; ; SET TIMSW==1 TO GENERATE TIMING HOOKS ; ; SET NONREN==1 TO GENERATE NONSHARABLE CODE ; OR ==0 FOR SHARABLE CODE ; IFNDEF NONREN, ;ASSUME SHARABLE JOBREN==124 LOC JOBREN XWD 0,RENADR JOB41==41 LOC JOB41 JFCL ; NOP FOR SIX12 UUO'S IFE NONREN, IFN NONREN, IFNDEF TIMSW, IFN TIMSW,< IF1,> BLIS11==1 IFNDEF CMUSW, IFNDEF BLIS11, IFE BLIS11, < TITLE BL10IO BLISS COMPILER I/O R. JOHNSSON 21-JUN-72 IF1, IFE CMUSW, < IF1, DEFINE SUBTLE (STR) < SUBTTL BL10IO---STANDARD VERSION---STR PAGE > > IFN CMUSW, < IF1, DEFINE SUBTLE (STR) < SUBTTL BL10IO---CMU VERSION---STR PAGE > > > IFN BLIS11, < TITLE BL11IO BLISS COMPILER I/O R. JOHNSSON 21-JUN-72 IF1, IFE CMUSW, < IF1, DEFINE SUBTLE (STR) < SUBTTL BL11IO---STANDARD VERSION---STR PAGE > > IFN CMUSW, < IF1, DEFINE SUBTLE (STR) < SUBTTL BL11IO---CMU VERSION---STR PAGE > > > DEFINE IFCMU DEFINE IFB11 DEFINE IFB10 SUBTLE ; EXTERNALS EXTERNAL DOPAGE ; TRUE ==> A FORM FEED WAS SEEN EXTERNAL BUFFL ; LENGTH OF INPUT BUFFER EXTERNAL BUFF,PBUFF ; INPUT LINE BUFFER EXTERNAL PUNT ; ABORT COMPILATION ROUTINE EXTERNAL CURCHN ; CURRENT INPUT CHANNEL EXTERNAL BUFDATA ; HEAD OF IO BUFFER DATA STRUCTURE EXTERNAL SIX12 ; TIMER/DEBUG MODULE EXTERNAL ERR8 ; INPUT FILE ERROR ROUTINE EXTERNAL ERR12 ; LINE TOO LONG EXTERNAL SEGCALL ; SEGMENT SWAPPER FOR OVERLAY EXTERNAL LMARG ; CONTAINS SEQUENCE NUMBER FOR LINED FILES EXTERNAL SOSPGC ; LOGICAL PAGE COUNT EXTERNAL RLS ; IO RELEASE ROUTINE EXTERNAL TTYLIS ; TTY OUTPUT ROUTINE EXTERNAL FLAGS ; CORE LOCATION OF COMPILER FLAGS EXTERNAL .ENT.1,.EXT.1 ; BLISS ROUTINE PROLOG/EPILOG ROUTINES EXTERNAL PAGCNT ; PHYSICAL PAGE IN LOGICAL PAGE INTERNAL READTEXT ; CALLED BY COMPILER TO GET A LINE $F=:2 $V=:3 ; ACCUMULATOR ASSIGNMENTS P==0 ; BLISS STACK POINTER CH==4 ; INPUT CHANNEL NUMBER BU==5 ; INPUT BUFFER HEADER ADDRESS W==6 ; WORKING REGISTER J==7 ; HOLDS CHARACTER N==12 ; JSP REGISTER F==17 ; FLAG REGISTER ; FLAG BITS OF INTEREST ENDBIT==40 ; SCANNER HAS SEEN END OF CMD STRING FUNNY==100000 ; 1 ==> DOING SOS PAGE MARK (CMU) IFB11, IFB10, ; ALL SOURCE FILES HAVE BEEN READ ; I/O BIT MASKS IOEOF==20000 ; END OF FILE STATUS BIT ; COMPILER CONSTANTS LSTCHN==3 ; LISTING CHANNEL SRCCHN==4 ; NORMAL SOURCE CHANNEL IOSEG==3 ; NUMBER OF I/O HISEGMENT ; CALLI DEFINITIONS RESET==0 EXIT==12 ; SIX12 CALL UUO IFN TIMSW, SUBTLE DEFINE RENTRY(RNAME) < IFE TIMSW,< RNAME:> IFN TIMSW,< RNAME: DEBUG RNAME >> DEFINE REXIT(RNAME) < IFE TIMSW,<> IFN TIMSW,< DEBUG 1,RNAME >> RENTRY READTEXT JSP N,.ENT.1 ; BLISS ROUTINE PROLOG ADD P,[XWD 2,2] ; ALLOCATE 2 LOCALS DEFINE RDCNT<1($F)> ; GIVE IT A NAME DEFINE SAVRET<2($F)> ; ... IFCMU,< PUSH P,[0] PUSHJ P,TTYLIS SUB P,[XWD 1,1] > MOVE F,FLAGS ; GET FLAGS OUT OF CORE MOVE N,[POINT 7,BUFF-1,34] MOVEM N,PBUFF MOVE N, BUFFL MOVEM N, RDCNT MOVEI J, " " JSP N, PACK IFB10,< TLNE F, FINFLG > IFB11,< TRNE F, FINFLG > JRST RTEXIT MOVE CH,CURCHN ; GET CHANNEL NUMBER HRRZ BU,BUFDATA(CH) ; GET BUFFER HEADER ADDRESS RTEXT1: JSP N,INCHR JSP N,RTEXT3 RTEXT2: SOSG 2(BU) PUSHJ P,CHAR1 ;GET A NEW BUFFER ILDB J,1(BU) RTEXT3: CAIGE J," " JRST LOCHAR ;CONTROL CHARACTER PACK: SOSGE RDCNT PUSHJ P,ERR12 ;LINE TOO LONG IDPB J,PBUFF JRST (N) ;LOOP LOCHAR: CAIN J,11 ;TAB JRST PACK CAIN J,15 ;CR JRST RTEXT4 CAIE J,14 ;FF JRST RTEXT2 ;IGNORE IFB11,< AOS SOSPGC ;YES, INCREMENT PAGE COUNT SETOM PAGCNT ;RESET ACTUAL PAGE PER LOGICAL PAGE COUNT SETOM DOPAGE > ;INDICATE FORM FEED WAS SEEN IFB10,< SETOM RPAGE > ; SPECIAL FF FLAG FOR BLIS10 IFB10,< MOVEI J,15 ; CR RTEXT4: JSP N,PACK RTEXIT: MOVEI J,177 ; RUBOUT JSP N,PACK > IFB11,< RTEXT4: RTEXIT: MOVEI J,177 ; RUBOUT JSP N,PACK MOVEI J,15 ; CR JSP N,PACK > MOVE N,[POINT 7,BUFF-1,34] MOVEM N,PBUFF MOVEM F,FLAGS ; RESTORE FLAGS FOR COMPILER SUB P,[XWD 2,2] ; DEALLOCATE LOCALS REXIT READTEXT JRST .EXT.1 ; BLISS ROUTINE EPILOG SUBTLE CHARA: MOVEM J,LMARG+1 IFCMU,< CAMN J,[ASCII/ /] ; SKIP IF NOT AN SOS PAGE BREAK TRO F, FUNNY ;INDICATE DOING SOS PAGE MARK > MOVNI J,5 ADDM J,2(BU) AOS 1(BU) INCHR: SOSG 2(BU) PUSHJ P,CHAR1 IBP 1(BU) MOVE J, @1(BU) TRZE J,1 JRST CHARA IFCMU,< TRZE F, FUNNY ;ARE WE DOING SOS PAGE MARK? JRST INCHR ;YES, SKIP OVER THE 2ND CR > LDB J,1(BU) CAIN J,12 ;LINE FEED? JRST INCHR ;YES - IGNORE JUMPE J, INCHR JRST (N) ;NO, RETURN SUBTLE CHAR1: XCT INLST-1(CH) ; CALL MONITOR FOR A BUFFER POPJ P, ;EXIT HRLZ W,CH ;SET UP LSH W,5 ; CHANNEL NUMBER IOR W,[STATO 0,IOEOF]; FOR STATO XCT W PUSHJ P,ERR8 ; INPUT TRANSMISSION ERROR MOVEM N,SAVRET ; SAVE RETURN OVER ROUTINE CALL CAIL CH,SRCCHN+1 ; ARE WE IN A REQUIRE? JRST REQEOF ; YES-SPECIAL EOF PROCESSING PUSH P,[SRCCHN] ; PARAMETER PUSHJ P,RLS ; RELEASE CHANNEL SUB P,[XWD 1,1] ; CLEAN UP STACK TRNE F, ENDBIT ; END OF ALL INPUT FILES? JRST CHAR2 ; YES MOVEM F,FLAGS ; PASS FLAGS TO INITIO PUSH P,[1] ; CONTINUE SCAN IN INITIO PUSH P,[IOSEG] ; OVERLAY SEGMENT NUMBER PUSHJ P,SEGCALL ; CALL SEGMENT SWAPPER SUB P,[XWD 2,2] ; CLEAN UP MOVE F,FLAGS ; INITIO MAY HAVE CHANGED THEM TRNN $V,1 ; TEST FOR NORMAL RETURN PUSHJ P,PUNT ; NO, INITIO ALREADY GAVE MESSAGE MOVE CH,CURCHN ; CHANNEL NUMBER MOVE BU,BUFDATA(CH) ; BUFFER HEADER MOVE N,SAVRET ; RESTORE RETURN ADDRESS JRST CHAR1 ; NOW GO BACK AND GET THE NEW BUFFER INLST: IN 1,0 IN 2,0 IN 3,0 IN 4,0 IN 5,0 IN 6,0 IN 7,0 IN 10,0 IN 11,0 IN 12,0 IN 13,0 IN 14,0 IN 15,0 IN 16,0 IN 17,0 REQEOF: PUSH P,CH ; CURRENT CHANNEL NUMBER PUSHJ P,RLS ; RELEASE THE CHANNEL SUB P,[XWD 1,1] ; CLEAN UP SOS CH,CURCHN ; DECREMENT CHANNEL NUMBER HRRZ BU,BUFDATA(CH) ; BUFFER HEADER MOVE J,[ASCII/ /] MOVEM J,LMARG+1 ; BLANK OUT SEQUENCE NUMBER SUB P,[XWD 1,1] ; REMOVE RETURN ADDRESS MOVEI J,15 ; CARRIAGE RETURN MOVE N,SAVRET ; RESTORE RETURN ADDRESS JRST (N) ; RETURN CHAR2: IFB10,< TLO F,FINFLG > IFB11,< TRO F,FINFLG > ;TELL COMPILER WE'RE THROUGH SUB P,[XWD 1,1] ; REMOVE RETURN ADDRESS MOVEI J,15 ; RETURN A CR JRST RTEXT4 RENADR: CLOSE LSTCHN,0 ; CLOSE LISTING FILE ON REENTRY CALLI 0,RESET ; DO NOT WRITE OTHER FILES CALLI 0,EXIT ; GO AWAY END