PVOL1BACKUP D%B1111001001 1Pe _vߋt& dR 5@V$d zt|xx| ҁr& 6L~7L e7x~~E҈C2S.  ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM ***  w 4  ť ť 0B < Aaw  ' UD$BA  &( U BQ b Е*  & & PHDR1ERRLOG 00010001000100 00000 00000 000000DECFILE11A PPHDR2U0414404144 M 00 PPERRLOGSBINT27AUG85U  <1= DR06SEP85091622DECNPe _vߋt& dR 5@V$d zt|xx| ҁr& 6L~7L e7x~~E҈C2S.  ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM ***  w 4  ť ť 0B < Aaw  ' UD$BA  &( U BQ b Е*  & & PPFSBINT27AUG8511JUL85C|05SEP85141554SBINT27AUG85[001,001] DECFILE11A 1PUFDU}vzPC"")!kQ"":dkQ ""xkQ%""kQJ""_MkQN""fkQ""zskQ""4qkQ""xkQT""?TkQUf'kQPUFDW}zP"E "":dkQ ""xkQ%""kQJ""_MkQN""fkQ""zskQ""4qkQ""xkQT""?TkQUf'kQPHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADPPUFDU}vzP.CN(("")!kQ27AUG8520142027AUG85201354'Fp.M--n"":dkQ27AUG8520144927AUG85201424,nh. G""xkQ27AUG8520150727AUG85201451.%M"""kQ27AUG8520151627AUG85201508.JLMMN""_MkQ27AUG8520155027AUG85201517L5.NN??""fkQ27AUG8520162727AUG85201552>.H""zskQ27AUG8518384127AUG85183839T.?""4qkQ27AUG8518384527AUG85183842Z3.N##""xkQ27AUG8518384827AUG85183845"^o.TO""?TkQ27AUG8520163227AUG85201629ְ.UNf'kQ27AUG8520163627AUG85201633 PUFDW}zP.S"E 28AUG8501485928AUG850148597PDATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATAP0CFS"< .TITLE ERRELI - MAIN MODULE OF COMMAND INTERFACE FOR ERRLOG .IDENT /V03.00/;;;#; COPYRIGHT (C) 1981, 1985 BY); DIGITAL EQUIPMENT CORPORATION, MAYNARD(; MASSACHUSSETTS. ALL RIGHTS RESERVED.;5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE5; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TON5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.;15; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T;; ; MODULE: ERRELI.MAC; 6; VERSION: V03.00 - INITIAL RELEASE RSX-11M-PLUS V3.0; MICRO/RSX V3.0;N; AUTHOR: S. ADAMS; ;O; PREVIOUSLY MODIFIED BY:R;F ; C. PUTNAM ; S. ADAMSI;I; MODIFIED BY:;S; J. MELVIN 24-JUN-83 A; JM002 ALLOW USER TO DEFINE WHAT PACKETS TO PUT IN LOG.ERRD;T; J. MELVIN 18-MAY-83 :; JM003 PROCESS ERRORS.LOG, ERRORS.ACC FOR MICRO RSX;E; J. MELVIN 18-MAY-83 5; JM014 SUPPORT OUTPUT FILE ON THE SHOW COMMAND;; J. MELVIN 09-JUN-83 >; JM004 CONDITIONALIZE VARIOUS TABLE SIZES FOR MICRO RSX; ; J. MELVIN 08-JUL-83 ); JM011 DEFINE AN ABORT AST FOR ELIF; ; J. MELVIN 07-SEP-83 4; JM007 SUPPORT/VERIFY NEW SWITCH COMBINATIONS; ; J. MELVIN 07-SEP-83 3; JM010 SUPPORT /CU OR /HI ON THE /SH COMMAND ;V; J. MELVIN 25-OCT-834; JM016 MOVE ERROR MESSAGES TO SEPARATE MODULE;; J. MELVIN 25-OCT-835; JM017 MAKE TASK NAME IN ERROR MESSAGE DYNAMICN;"; SUBROUTINES AND THEIR FUNCTIONS:;M; ERRELI - MAIN ROOT0; ERRPAR - PARSE COMMAND LINE (SEE OTHER MODULE)D; ERROR - PRINT ERROR MSG AND EXIT IF FATAL BACK TO START IF WARNINGI; CALDIR - CALLS THE ERROR LOGGING DIRECTIVE, AND WAITS FOR COMPLETION. A; RECAST - RECEIVE DATA AST. CALLED AFTER ERRLOG HAS RECEIVED THE D; COMMAND PACKET, PROCESSED IT AND SENT BACK THE EXIT STATUS.;SK; NOTE -- MESSAGE EMB WILL NOT BE IMPLEMENTED THIS RELEASE, BUT HOOKS HAVE :; BEEN LEFT IN THE CODE FOR FUTURE CONSIDERATION.;C;N .PAGE .SBTTL COMMON DATA .MCALL EPKDF$,SMSG$S,UCBDF$ .MCALL ASTX$S" .MCALL FSRSZ$,FINIT$,QIO$S,EXIT$S8 .MCALL ALUN$S,CLEF$S,STLO$S,WTLO$S,SRDA$C,RCVD$S,SETF$S1 .MCALL MRKT$S,CMKT$S,RQST$S,STSE$S,WTSE$S,GLUN$S .MCALL SREA$C .MCALL GTSK$C- EPKDF$ ; SET UP EMB OFFSETS AND ERROR CODESM UCBDF$ ; SET UP UCB OFFSETSE .MCALL QIOW$S* FSRSZ$ 2 ;2 FILES OPEN AT THE SAME TIME.;E ; DEFINITIONSI;EER.FAT == 1 ; FATAL ERROR ER.WAR == 2 ; WARNING;E; BIT OFFSETS IN FLAGO;LOGBIT == 1 ; LOG BIT BACBIT == 2 ; BACKUP FILEDRESBIT == 4 ; RESETCSHOBIT == 10 ; SHOWSHLBIT == 20 ; CHANGE HARD LIMIT SLBIT == 40 ; CHANGE SOFT LIMITCLIMBIT == 100 ; START LIMITINGMESBIT == 200 ; MESSAGESHELBIT == 400 ; HELPNLGBIT == 1000 ; NOLOGNLMBIT == 2000 ; NOLIM!SWIBIT == 4000 ; SWITCH LOG FILESTAPPBIT == 10000 ; APPEND*DEBIT == 20000 ; DELETE FILE ON COMPLETION(NVBIT == 40000 ; USE NEW VERSION OF FILE; $;OFFSETS INTO FLAG1 FOR NEW SWITCHES;" DOZE == 1 ;ZERO NEW FILE FORMATS* DOUP == 2 ;UPDATE NEW FILE FORMAT TOTALS3 FILOUT == 4 ;OUTPUT FILE SPECIFIED FOR /SH (SHOW)21 CUBIT == 10 ;DISPLAY CURRENT BINARY INFORMATIONI< HISBIT == 20 ;DISPLAY HISTORY BINARY INFORMATION6 NEWBIT == 40 ;DISPLAY ASCII FORMATTED FILE7 TYPBIT == 100 ;LOG SELECTED ERRORLOG PACKETST TLOGBT == 200 ;WORK FLAG# TSHOBT == 400 ;WORK FLAGV NVFLAG == 1 ;NEW VERSION FLAGI DEFLAG == 2 ;DELETE FILE FLAGE;W*MAXDEV == 20. ; MAXIMUM NO. DEVICES IS 20.;;U"STO = 0 ; CODE FOR STOP LO00CNDATADATADATADATADATADATADATADATADATADATAG OR LIM#STA = 1 ; CODE FOR START LOG OR LIMI,NOCHA = 2 ; CODE FOR NOCHANGE TO LOG OR LIM )EXSTA::.WORD EX$SUC ; DEFAULT EXIT STATUS !TASK:: .BLKW 2. ;TASK NAME (R50)R9BEGCOM:: ; MUST BE FIRST OF WHAT NEEDS TO BE INITIALIZEDI1FLAG:: 0 ; FLAG WORD FOR USER-SPECIFIED SWITCHES ; B0 = LOG ; B1 = BACKUP  ; B2 = RESET ; B3 = SHOW; ; B4 = HARD LIMA ; B5 = SOFT LIMN ; B6 = LIM ; B7 = MES ; B8 = HELPW ; B9 = NOLOG ; B10= NOLIM ; B11= SWITCH ; B12= APPENDE ; B13= DELETEL ; B14= NEW VERSION;A.FLAG1:: .WORD 0 ;ACCUMULATOR FOR NEW SWITCHES;G; B00 = ZERO NEW FILES ; B01 = UPDATE NEW FILESA'; B02 = OUTPUT FILE SPECIFIED FOR SHOW:); B03 = DISPLAY THE CURRENT ACCUMULATORSA); B04 = DISPLAY THE HISTORY ACCUMULATORSI-; B05 = DISPLAY THE ASCII FORMAT OF THE FILE&; B06 = LOG SELECTED ERRORLOG PACKETS4; B07 = WORK FLAG FOR NEW SWITCH COMBINATION VERIFY4; B08 = WORK FLAG FOR NEW SWITCH COMBINATION VERIFY; 1EMBTYP::.WORD 0 ; EMB TYPE - COMMAND EMB OR OTHER )SUBTYP::.WORD 0 ; SUBTYPE - WHICH COMMANDC-EMBBUF::.BLKW 42. ; BUFFER FOR DATA SUBPACKETE7FILTER::.WORD 0 ;SELECTION FLAG WORD TO PASS TO ERRLOGI ENDBUF = . ; MARK END OF BUFFERDMESSAGE::.BLKW 2. ; MESSAGE STRING MAKE THIS BIGGER WHEN IMPLEMENTED0HARLIM::.WORD 0 ; HARD LIMIT AS SPECIFIED BY /HL%SOFLIM::.WORD 0 ; SOFT LIMIT FROM /SLC9NODEV:: .WORD 0 ; NUMBER OF DEVICES (FROM /RES,/SHO , EG)IOUTFIL::.BLKW 16. ; FULL OUTPUT FILE SPEC - LENGTH OF DEV, DEV,LEN OF UIC  ; AND USED BY SHOO%EMBLEN: .WORD 0 ; SIZE OF DATA BUFFERH* ; , UIC, LEN OF NAME, NAME ALL IN BYTES/CHALIM: .BLKW 2 ; TEMP STORAGE FOR LIMIT CHANGEG7OUTDEV::.BLKW 70. ;2 WORDS PER DEVICE. 35 DEVICES MAXR ; AND SCRATCH FOR SHOG4DIRDSW: .WORD 0 ; DSW RETURN FROM SEND MSG DIRECTIVE-DIRLUN: .WORD 0 ; LUN USED IN " " ":DIRMSK: .WORD 0 ; MASK " " " "0DIRNUM: .WORD 0 ; NUMBER OF TIMES SMSG ATTEMPTED)GLNBUF: .BLKW 6 ; BUFFER FOR GET LUN INFOI3ABORT:: .WORD 0 ;ABORT INDICATOR 0 - NO 1 - YESS'INISIZ=.-BEGCOM ; SIZE OF COMMON BLOCKA?RECDAT: .BLKW 15. ; RECEIVE DATA FROM ERRLOG (GETS EXIT STATUS)K-DEFLTR::.WORD 0 ;DEFAULT SELECTION FLAG WORDB,BUFOUT:: .BLKB 90. ;BUFFER FOR EDMSG OUTPUT.BLKARG:: .BLKW 4. ;BUFFER FOR EDMSG ARGUMENTS>ERRLOG: .RAD50 /ERRLOG/ ; NAME OF TASK FROM WHICH TO REC. DATA .EVEN; ,; JUMP TABLE FOR FILLING IN EACH TYPE OF EMB:; NOTE LOG AND NOLOG MUST BE BEFORE LIM AND NOLIM AND ALSO@; LOG AND NOLOG MUST BE BEFORE MES FOR THIS TABLE TO WORK RIGHT.8; THE FORMAT IS.. FOR EACH COMMAND THAT CAN STAND ALONE @; THE BIT IN FLAG, THE SUBTYPE (OR IF NOT COMMAND EMB, THE TYPE,/; THEN THE LOCATION TO WHICH TO GO AND PROCESS.U;TJMPTBL:9 LOGBIT, E$SSTA ,LOGU NLGBIT, E$SSTA , NOLOG BACBIT, E$SBAC , BAC RESBIT, E$SRES , RES SHOBIT, E$SSHO ,SHO  HLBIT, E$SCHL ,CHA SLBIT, E$SCHL ,CHA LIMBIT, E$SSTA ,LIM MESBIT,0 , MES HELBIT,0 ,HELS NLMBIT, E$SSTA , NOLIM  SWIBIT, E$SSWI ,SWI APPBIT, E$SAPP , APPF 0 , 0 ,0 ; END OF TABLE;; ERROR MESSAGE ; .NLIST BEXT .ENABL LC; MISCELLANEOUS DATA,;ESHO5B:: .ASCIZ // SHO5C:: .ASCIZ /* / .EVEN&IOCBUF:: .BLKW 2 ; BUFFER FOR IO COUNT; .PAGE .SBTTL MAIN LINE CODE;N; MAIN ENTRY POINT FOR ELI;,&$ELI:: FINIT$ ; INITIALIZE FCS STUFF* SRDA$C RECAST ; SPECIFY RECEIVE DATA AST& SREA$C ABORCV ;DEFINE ABORT RECEIVER6 GTSK$C TASK ;GET TASK INFORMATION FOR ERROR MESSAGES% MOV #EX$SUC,EXSTA ; INIT EXIT STATUSI;E; RESTART ELI OPERATION HERE;T.RSTAR::' MOV #BEGCOM,R0 ; SET UP TO INIT COMMONB MOV #INISIZ,R1 ; SIZE OF COMMON ASR R1 ; MAKE IT A WORD COUNT 15$: CLR (R0)+ ; CLEARO SOB R1,15$ ; BR IF MORE TO CLR) CALL PARSE ; GET AND PARSE COMMAND LINE;A4; FORMULATE PARTS OF EMB THAT ELI IS RESPONSIBLE FOR;F( MOV #EMBBUF,R0 ; INIT POINTER TO BUFFER, MOV #JMPTBL,R1 ; INIT POINTER TO JUMP TABLE;R20$: BIT (R1)+,FLAG ; MATCH? BNE 25$ ; YES - BR) CMP (R1)+,(R1)+ ; INC PTR TWICE AND TESTI% BNE 20$ ; IF NOT END OF TABLE, LOOP; JMP .RSTAR ; SHOULD NE00CVS"VER GET HERE SINCE CHECKED IN PARSES;R; HAVE FOUND MATCH;R25$:2 MOV #E$CCMD ,EMBTYP ; ASSUME EMB IS A COMMAND EMB5 MOV (R1)+,SUBTYP ; SET UP SUBTYPE (KNOWN FROM TABLE)P! JMP @(R1) ; JUMP TO PROCESS EMB  .PAGE .SBTTL CHANGE LIMITSS;E; CHANGE LIMITS PROCESSING.N;PCHA:( MOV #CHALIM, R2 ; GET ADDR OF TEMP BUFF$ BIT #HLBIT,FLAG ; HARD LIM CHA REQ? BEQ 30$ ; NO BR$% MOVB #1, (R2)+ ; SET CHANGE HARD LIMR# MOVB HARLIM,(R2)+ ; MOV HARD VALUEE BR 40$L30$: 3 CLR (R2)+ ; IF NO HARD LIM, CLEAR LIM AND HL FLAGI40$:& BIT #SLBIT,FLAG ; SOFT LIM CHA REQ'D? BEQ 50$ ; NO - BRA" MOVB #1, (R2)+ ; SET CHA SOFT LIM$ MOVB SOFLIM,(R2)+ ; MOVE SOFT VALUE BR 60$50$:& CLR (R2)+ ; IF NO SOFT LIM, CLR WORD60$: MOV NODEV, R1 ; GET NO. DEVICES" MOV #OUTDEV, R2 ; ADDR OF DEVICES65$: ;, MOV CHALIM, (R0)+ ; MOVE SOFT AND HARD LIMS MOV CHALIM+2, (R0)+$ MOV (R2)+, (R0)+ ; MOVE DEVICE NAME! MOV (R2)+, (R0)+ ; AND UNIT NO.;$ SOB R1, 65$ ; LOOP FOR EACH DEVICE JMP FINISH ; FINISH UP .PAGE .SBTTL SHOW INFORMATION;#; SHOW INFORMATION PROCESSING?;BSHO:! MOV NODEV,(R0)+ ; MOV IN DEVICES  BEQ 80$ ; BR IF NO DEVICES MOV NODEV,R1 ; COUNTER * MOV #OUTDEV,R2 ; POINT AT 1ST OUTPUT DEV.#70$: MOV (R2)+,(R0)+ ; MOV MNEMONIC. MOV (R2)+,(R0)+ ; MOV UNIT NO. ! SOB R1,70$ ; LOOP IF MORE DEVS.080$:& MOV #EMBBUF, R4 ; POINT FOR SHOW SUBR& MOV FLAG1,-(SP) ;GET NEW SET OF FLAGS@ BIC #^C,(SP)+; CLEAR ALL BUT DISPLAY FLAGS0 BEQ 85$ ;NONE SET. USE THE OLD DISPLAY METHOD ( BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT$ BNE 90$ ;YES. CALL CORRECT MODULE485$: CALL SHOWV1 ;USE "OLD" METHOD OF ERROR DISPLAY4 BR 100$ ;AVOID CALL THE "NEW" ERROR DISPLAY METHOD;90$: CALL SHOWV2 ;USE "NEW" METHOD OF ERROR DISPLAY METHOD2!100$: JMP .RSTAR ;GO AND RESTART0 .PAGE .SBTTL MESSAGE;:; MESSAGE PROCESSING;T0MES: MOV SUBTYP,EMBTYP ; MSG EMB ISN'T A COMMAND/ CLR SUBTYP ; AND CMD WAS DEFAULT. - NO SUBTYPA JMP FINISHY .PAGE .SBTTL RESET ;.D; RESET --DO GLUN TO SEE IF TERMINAL IS PRIVILEGED. IF NOT, ERROR. B; DO ASSIGN LUN FOR THE GIVEN DEVICE, ISSUE DIRECTIVE TELLING EXEC; TO JUST RESET.;LRES: MOV #"TI, R4 ; DEV NAME IS TI:O CLR R5 ; DEV NO. IS 0L+ ALUN$S #3, R4, R5 ; ASSIGN LUN BEFORE GLUNM% GLUN$S #3, #GLNBUF ; DO GET LUN INFOR7 BIT #U2.PRV, GLNBUF+6 ; TEST PRIV BIT OF 2ND CHAR WORDT BNE 3$ ; BR IF PRIVP% MOV #PRVER, R3 ; ELSE, ERROR MESSAGE ' JMP ERROR ; ATTEMPTED PRIV. VIOLATIONP3$:S% MOV #E$CDCI,EMBTYP ; NOT COMMAND EMB % MOV NODEV, R4 ; COUNT NO. OF DEVICESG& MOV #OUTDEV, R5 ; POINT AT 1ST DEVICE15$: ALUN$S #3,(R5),2(R5) ; ASSIGN DEVICE TO LUN 3  BCC 10$ ; BR IF NO ERRORSV& MOV #EX$ERR,EXSTA ; ERROR EXIT STATUS0 MOV (R5),DEVICE ; PUT DEV. NAME INTO ERROR MSG. MOV 2(R5),R1 ; BINARY UNIT NO.  CLR R2 ; FLAG TO CBOMG MOV #DVUNIT,R0 ; RESULT ADDRO CALL $CBOMG ; CONVERT ! MOV R4,-(SP) ;SAVE WORK REGISTERL" MOV #ALNER,R3 ;ADDRESS OF MESSAGE* CALL ERRPRI ;PRINT OUT THE ERROR MESSAGE$ MOV (SP)+,R4 ;RESTORE WORK REGISTER BR 15$ ; LOOP TO NEXT DEVICE;#; NO ERRORS HERE- DO RESET EMB;$10$: MOV #3,DIRLUN ; RESET LUN 33 MOV #SM.ZER!SM.CMD,DIRMSK ; MASK TO ZERO IO COUNTSE CALL CALDIR ; CALL DIRECTIVE15$:' CMP (R5)+,(R5)+ ; POINT TO NEXT DEVICE SOB R4,5$ ; LOOP FOR DEVICE  JMP .RSTAR ; .PAGE .SBTTL HELP;R; HELP PROCESSINGC; HEL: ; TYPE HELPM JMP .RSTARS .PAGE .SBTTL PROCESS LOG AND LIMD;SF; PROCESS (NO)LOG OR (NO)LIM EMB'S. FOLLOWING IS TABLE OF CMD MEANINGS.; SET UP FLAG FOR LIMITING STATUS ON A LOG EMB;I; INPUT LOG/ LIM STATI;R; LOG(LIM) STA STA; LOG NOLIM STA STOT; NOLOG(NOLIM) STO STO; NOLOG LIM STO STAZ; LIM NOCHA STA; NOLIM NOCHA STO;C; ( .ENABL LSB ; ENABLE LOCAL SYMBOL BLOCKLOG:" MOVB #STA, (R0)+ ; START LOGGING" MOVB #STO, (R0) ; ASSUME STOP LIM$ BIT #NLMBIT,FLAG ; NOLIM REQUESTED? BNE 40$ ; BR IF YESS MOVB #STA, (R0) ; SET LIMIT ON  BR 40$NOLOG: MOVB #STO, (R0)+ ; STOP LOGGING" MOVB #STO, (R0) ; ASSUME STOP LIM#00C^DATADATADATADATADATADATADATADATADATADATA BIT #LIMBIT, FLAG ; LIM REQUESTED?E BEQ 40$ ; BR IF NOTL" MOVB #STA, (R0) ; IF SO, SET CODE BR 40$ ; E; NOTE: BECAUSE (NO)LOG IS BEFORE (NO)LIM IN THE JUMP TABLE, THE ONLY ;; POSSIBLE PERMUTATION HERE IS FOR LIM ALONE OR NOLIM ALONEB;KLIM:/ MOVB #NOCHA, (R0)+ ; SET LOG CODE TO NO CHANGE " MOVB #STA, (R0) ; SET LIM CODE ON BR 40$ONOLIM:* MOVB #NOCHA, (R0)+ ; SET NO CHANGE TO LOG MOVB #STO, (R0) ; STOP LIM40$:' TSTB -(R0) ; BACK UP TO WORD BOUNDARYV+ SWAB (R0)+ ; SWITCH AND MOVE TO NEXT WORD  BR 45$M;Q(; PROCESS SWITCH, BACKUP AND APPEND HERE; SWI:APP:BAC:; ; FALL THRU FOR LOG /LIM TO ..; MOVE IN FILE NAME); CLR (R0)+ ; SKIP RESERVED WORD45$::47$: MOV DEFLTR,FILTER ;USE DEFAULT FILTER IF NOTHING ELSE/ BIT #TYPBIT,FLAG1 ;WAS /TY ACTUALLY SPECIFIED?  BEQ 49$ ;NO. USE THE DEFAULT7 CLR FILTER ;START THE FILTER FRESH (NOTHING SELECTED)G2 CALL GETFLT ;PARSE /TY KEYWORDS AND BUILD FILTER% BCC 49$ ;NO ERRORS WERE ENCOUNTEREDA( MOV ERRCOD,R3 ;ACTUAL ERROR ENCOUNTERED' JMP ERROR ;PRINT OUT AN ERROR MESSAGED49$: TST NODEV ; ANY FILES? BNE 50$ ; BR IF YES  CLR R2 ; SET ZERO FILE SIZEN( BR 75$ ; ...AND JOIN COMMON CODE BELOW;5; MOVE IN FILE NAMEI;R50$:* MOV #3, R3 ; 3 FOR DEV, UIC AND FILE NAME MOV R0, -(SP) ; SAVE SIZE SLOTD CLR R2 ; INIT TOTAL BYTE COUNT MOV #OUTFIL, R4 ; FILE BUFFER+ TST (R0)+ ; POINT TO NEXT SLOT AFTER SIZER%55$: MOVB (R4)+, R5 ; SIZE TO COUNTER43 BEQ 70$ ; IF ZERO, MOVE TO NEXT PART OF FILE SPECU ADD R5, R2 ; ADD SIZE TO TOTAL "60$: MOVB (R4)+, (R0)+ ; MOVE SPEC# SOB R5, 60$ ; LOOP FOR 1 PART OF 3 +70$: SOB R3, 55$ ; LOOP FOR NEXT OF 3 PARTSB' MOV (SP)+, R0 ; RETRIEVE SAVED POINTER5; #; FILL IN SIZE BYTE AND /NV/DE CODE,$; R0 POINTS AT NEXT AVAIL. BYTE AND+; R2 CONTAINS THE TOTAL BYTE COUNT OF FILEI;O!75$: CLRB (R0) ; CLR /DE/NV FLAGF+ BIT #EL.SEF,$EFMSK ;SPECIAL FILES ENABLED?A BEQ 77$ ;NO.& BIT #DOZE,FLAG1 ;ZERO ERRORS.* FILES? BEQ 76$ ;BR IF NO.2 BISB #ZEFLAG,(R0) ;SHOW ERRLOG SHOULD ZERO FILES.,76$: BIT #DOUP,FLAG1 ;UPDATE ERRORS.* FILES? BEQ 77$ ;BR IF NO.4 BISB #UPFLAG,(R0) ;SHOW ERRLOG SHOULD UPDATE FILES.77$:$ BIT #DEBIT,FLAG ; DELETE SPECIFIED? BEQ 80$ ; BR IF NO" BISB #DEFLAG,(R0) ;SET DE IF YES.80$:! BIT #NVBIT,FLAG ; /NV SPECIFIED?S BEQ 90$ ; BR IF NO" BISB #NVFLAG,(R0) ;SET NV IF YES.90$:% MOVB R2,1(R0) ; FILL IN SIZE OF FILEL;E5; NOW POINT R0 TO THE END OF THE BUFFER AND FINISH UP.;I 100$: MOV #ENDBUF,R0 ; SET UP RO JMP FINISH ; ...AND FINISH UPZ .DSABL LSB: .PAGE .SBTTL FINISH UP HERE;I"; CALCULATE SIZE OF DATA SUBPACKET;AFINISH:H" MOV #EMBBUF,R1 ; START OF BUFFER% SUB R1,R0 ; SUB FROM LAST WORD + 22 MOV R0,EMBLEN ; MOVE SIZE TO LENGTH WORD OF BUFF CLR DIRLUN ; NO LUN$ MOV #SM.CMD, DIRMSK ; COMMAND MASK CALL CALDIR ; ISSUE DIRECTIVE JMP .RSTAR: .PAGE .SBTTL SUBROUTINE CALDIRF;L; HERE - ISSUE DIRECTIVE A; EFN2 IS CLEARED, THE DIRECTIVE IS ISSUED, WHEN DONE W/ THE DIR, A; ERRLOG SENDS US THE EXIT STATUS. WE THEN GO INTO A RECEIVE ASTT?; THE RECEIVE AST SETS THE EFN. THIS CODE IS MEANWHILE STOPPEDII; FOR THE EFN.. IF THE STOP FAILS, WE WILL FALL THROUGH AND WAIT UNSTEAD. G; IF ERROR, CHECK FOR NOT ACTIVE.. IF SO, REQUEST.. CHECK FOR PRIV. VIO C; IF REQUEST FAILS.. WAS IT AN INSTALL ERROR? IF REQUEST SUCCEEDS,D?; WAIT FOR ERRLOG TO ACTIVATE AND RETRY DIREC. UP TO 10. TIMES. ;E4; INPUTS - DIRMSK,DIRLUN,EMBBUF,EMBLEN,EMBTYP,SUBTYP; CALDIR:H- MOV #10., DIRNUM ; ALLOW AT MOST 10 RETRIEST10$: CLEF$S #2 ; CLEAR EFN/ MRKT$S #1,#30.,#2 ; MARK 30 SEC INCASE ERRLOGO ; DOES NOT RESPOND< SMSG$S #SM.SER,#EMBBUF,EMBLEN,! BCC 80$ ; IF NO ERROR , BRANCH ; A; THE DIRECTIVE GOOFED. SEE WHY - ERROR MSG FOR ALL ERRORS EXCEPT.3; TASK NOT ACTIVE... ON TASK NOT ACTIVE, DO REQUESTA;F! MOV $DSW, DIRDSW ; SAVE DIR DSWE CMKT$S #1 ; CANCEL MARK TIMES. CMP DIRDSW, #IE.ACT ; WAS ERRLOG NOT ACTIVE? BEQ 30$ ; BR IF NOT ACTIVE;. MOV #COMER, R3 ; E00CfS"RROR - COMMUNICATION ERROR CMP DIRDSW, #IE.PRI BNE 20$ ; BR IF YES' MOV #PRVER, R3 ; PRIVILEGE VIOLATION?20$: JMP ERROR ; PRINT MESSAGE30$:+ RQST$S #ERRLOG ; REQUEST THE ERRLOG TASK, BCC 50$ ; BR IF NO ERROR ;F2; REQUEST GOOFED.. GIVE ERROR MESSAGE AND GIVE UP;N) CMP $DSW,#IE.ACT ; TASK ALREADY ACTIVE?A4 BEQ 50$ ; IF SO - JUST PRETEND THE REQUEST WORKED( MOV #REQER, R3 ; ERROR- REQUEST FAILED+ CMP $DSW, #IE.INS ; WAS IT NOT INSTALLED?F BNE 40$ ; BR IF NOE( MOV #INSER, R3 ; ERROR - NOT INSTALLED40$: JMP ERROR50$:; C; REQUEST SUCCEEDED.. IF WE HAVE NOT EXCEEDED 10. TRIES, RETRY SMSGR; ) DEC DIRNUM ; DEC COUNTER FOR DIR TRIES # BPL 60$ ; BR IF SHOULD TRY AGAIN;0 MOV #COMER,R3 ; FAILED TO COMMUNICATE W/ERRLOG JMP ERROR60$:, MRKT$S #1,#1,#2 ; WAIT 1 SEC FOR ERRLOG TO ; BECOME ACTIVE! STSE$S #1 ; STOP FOR MARK TIMEK BCC 10$ ; BR IF NO ERRORS' WTSE$S #1 ; INCASE STOP IS NOT THERE # BR 10$ ; LOOP TO RETRY DIRECTIVEF;ED; SMSG SUCCEEDED.. WAIT FOR EITHER RECEIVE AST OR MARKTIME TO FINISHE; WHEN ONE FINISHED, SEE WHICH ONE IT WAS AND RETURN OR DO ERROR MSG.N; IF IT WAS A RESET, DON'T WAIT AROUND BECAUSE YOU WON'T HEAR BACK FROM ERRLOG;;80$:$ BIT #RESBIT,FLAG ; WAS IT A RESET? BEQ 90$ ; BR IF NO: CMKT$S #1 ; CANCEL MARK TIMEF RETURN ; BACK TO MAIN 90$: STLO$S 0,#3 ; STOP FOR EFNS BCC 95$ ; BR IF NO ERRORS) WTLO$S 0,#3 ; WAIT EFNS (IF STP FAILS)R95$: CMKT$S ; CANCEL MARKTIMES& CLEF$S #2 ; CLR EFN FOR RECEIVE AST! CMP $DSW, #IS.SET ; WAS IT SET?I! BEQ 100$ ; BR YES=RECEIVE DONEO$ MOV #RECER, R3 ; NO, RECEIVE ERROR JMP ERROR100$:E RETURN ; BACK TO CALLERY .PAGE .SBTTL ABORCV ABORT RECEIVER:+ABORCV: INC ABORT ;INDICATE ABORT OCCURRED9" ASTX$S ;RETURN FROM AST ROUTINE .PAGE .SBTTL RECEIVE AST ROUTINEM; >; RECEIVE DATA AST. THIS AST WILL BE ENTERED AFTER ERRLOG HAS;; RECEIVED THE COMMAND EMB, PROCESSED IT AND SENT BACK EXIT$ ; STATUS.L;RRECAST:C) RCVD$S #ERRLOG,#RECDAT ; TASK IS ERRLOG$. MOV #RECDAT,R0 ; RECEIVE BUFFER ADDR.. 1ST 2 ; WORDS ARE TASK NAME ,0 MOV 4(R0), EXSTA ; GET EXIT STATUS FROM ERRLOG0 SETF$S #2 ; INDICATE TO MAIN THAT DATA REC'D." ASTX$S ; RETURN FROM AST STATE .PAGEE .SBTTL M-PLUS SPECIFIC ROUTINE TO PLAY WITH UCB EXTENSION FOR ERRSHOE$ .IF DF R$$MPL ;M PLUS CONDITIONAL$MUCB1::;L%; MAP THE UCB EXTENSION THROUGH APR 6D;E. MOV KISAR6,-(SP) ;; SAVE CURRENT APR6 MAPPING6 MOV U.UCBX(R0),KISAR6 ;; ...AND MAP THE UCB EXTENSION! BEQ 50$ ;; NO EXTENSION HERE!! C MOV R0,-(SP) ;; SAVE R00 MOV #140000,R0 ;; ...AND CREATE THE APR6 OFFSET@ CMPB X.ERHC(R0),X.ERHL(R0) ;; CHECK THE VALUE AGAINST THE LIMIT" BLO 32$ ;; IF LO - O.K. SO FAR - MOV #SHO5C,(R5)+ ;; SAY THE LIMIT WAS BROKEN " BR 34$ ;; JOIN COMMON CODE BELOW132$: MOV #SHO5B,(R5)+ ;; THE LIMIT WAS NOT BROKEN*34$: MOVB X.ERHC(R0), (R5)+ ;; HARD COUNT CLRB (R5)+& MOVB X.ERHL(R0), (R5)+ ;; HARD LIMIT CLRB (R5)+U@ CMPB X.ERSC(R0),X.ERSL(R0) ;; CHECK THE VALUE AGAINST THE LIMIT" BLO 36$ ;; IF LO - O.K. TO EXIT - MOV #SHO5C,(R5)+ ;; SAY THE LIMIT WAS BROKENR" BR 38$ ;; JOIN COMMON CODE BELOW136$: MOV #SHO5B,(R5)+ ;; THE LIMIT WAS NOT BROKEN;38$: MOVB X.ERSC(R0),(R5)+ CLRB (R5)+; MOVB X.ERSL(R0), (R5)+ CLRB (R5)+  N, MOV X.IOC+2(R0),IOCBUF ;; REVERSE THE ORDER- MOV X.IOC(R0),IOCBUF+2 ;; ...OF THE LONGWORD) MOV (SP)+,R0 ;; RESTORE R0# BR 60$ ;; JOIN COMMON CODE BELOWR;I; HERE IF NO UCB EXTENSION .;C350$: MOV #SHO5B,(R5)+ ;; NO PREFIX FOR HARD ERRORS CLR (R5)+ ;; NO COUNTS EITHER CLR (R5)+ ;;)/ MOV #SHO5B,(R5)+ ;; NO PREFIX FOR SOFT ERRORSM CLR (R5)+ ;; NO COUNTS EITHER CLR (R5)+ ;; & CLR IOCBUF ;; NO I/O COUNTS EITHER  CLR IOCBUF+2 ;; .60$: MOV (SP)+,KISAR6 ;; RESTORE APR6 MAPPING CLR (R5)+ ;; RESERVE A SPACED RETURN ;; RETURN TO CALLER.ENDCE .END $ELI MOV (SP)+,R0 ;; RESTORE R0# BR 60$ ;; JOIN COMMON CODE BELOWR;I; HERE IF NO UCB EXTENSION .;C350$: MOV #SH00nDATADATADATADATADATADATADATADATADATADATA3 .TITLE ERRPAR - GET AND PARSE COMMAND LINE FOR ELI  .IDENT /V03.01/ .NLIST BEX+;;;#; COPYRIGHT (C) 1981,1985 BY ); DIGITAL EQUIPMENT CORPORATION, MAYNARDH(; MASSACHUSSETTS. ALL RIGHTS RESERVED.;/5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAYK5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE 5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE 5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERM5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE05; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO 5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.;85; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T; MODULE: ERRPAR.MAC;A7; VERSION: V03.01 CORRECT DEFAULT DEVICE FOR USER FILE ; ;E; AUTHOR: S. ADAMS; ; DATE: '80E;I; ; PREVIOUSLY MODIFIED BY:E;Y ; C. PUTNAM ; S. ADAMSH;I; MODIFIED BY:; ; J. MELVIN 24-JUN-83 <; JM002 ALLOW USER TO SELECT PACKETS TO LOG IN LOG.ERR;C; J. MELVIN 18-MAY-83 :; JM003 PROCESS ERRORS.LOG, ERRORS.ACC FOR MICRO RSX;R; J. MELVIN 09-JUN-83 :; JM004 CONDITIONALIZE VARIOUS TABLE SIZES FOR MICRO;I; J. MELVIN 09-JUN-83 8; JM005 DECREASE CONBUF TABLE TO A MEANINGFUL SIZE;R; J. MELVIN 10-JUN-83 0; JM006 CORRECT RANGE PROBLEM FOR A BRANCH;E; J. MELVIN 14-JUN-83 6; JM009 CORRECT PROBLEM WITH GCML LUN ASSIGNMENT; ; J. MELVIN 26-JUL-83 >; JM013 GENERATE ERROR MESSAGE FOR NO ERRORS.ACC ON SHOW; ; J. MELVIN 06-SEP-83 3; JM010 SUPPORT /CU OR /HI ON THE /SH COMMAND-;-; J. MELVIN 06-SEP-83 4; JM007 SUPPORT/VERIFY NEW SWITCH COMBINATIONS;0; J. MELVIN 18-MAY-83 5; JM014 SUPPORT OUTPUT FILE FOR THE /SH COMMANDE;N; J. MELVIN 10-AUG-83 /; JM015 MAKE ILLER A GLOBAL ERROR MESSAGEE;N; J. MELVIN 25-OCT-834; JM016 MOVE ERROR MESSAGES TO SEPARATE MODULE; ; J. MELVIN 25-OCT-835; JM017 MAKE TASK NAME IN ERROR MESSAGE DYNAMIC ;W; J. MELVIN 03-JAN-859; JJM106 CORRECT DEFAULT DEVICE FOR USER OUTPUT FILEN;; MACRO LIBRARY CALLS- : .MCALL CSI$1,CSI$2,GCML$,CSI$SW,CSI$SV,CSI$ND,GCMLB$,CSI$ .MCALL QIO$S,WTSE$S,CCML$# .MCALL FCSMC$,QIOW$S,QIOW$C,EPKDF$O$ FCSMC$ ;DEFINE FCS MACROS/SYMBOLS- EPKDF$ ;DEFINE ERRLOG FEATURE MASK OFFSETS CSI$ ; SET UP CSI OFFSETS?MULDEV = 74 ;SWITCHES (AS PER FLAG) THAT MAY HAVE MORE THAN ONE $ ;DEVICE SPECIFIED (RES,SHO,HL,SL)6NEGSWI = 101 ;SWITCHES THAT MAY BE NEGATIVE ( LOG,LIM);-; INPUT SWITCH TABLE FOR CSI;ACMDSWT:E CSI$SW TY,TYPBIT,FLAG1,,,TEXT# CSI$SW LOG,LOGBIT,FLAG,,NEG ; LOG,' CSI$SW BAC,BACBIT,FLAG ; BACKUP FILES! CSI$SW RES,RESBIT,FLAG ; RESETC CSI$SW SHO,SHOBIT,FLAG ; SHOW2 CSI$SW HL, HLBIT,FLAG,,,HARD ; CHANGE HARD LIMIT2 CSI$SW SL, SLBIT,FLAG,,,SOFT ; CHANGE SOFT LIMIT. CSI$SW LIM,LIMBIT,FLAG,,NEG ; START LIMITING); CSI$SW MES,MESBIT,FLAG ; SEND MESSAGEE!; CSI$SW HEL,HELBIT,FLAG ; HELPS( CSI$SW SWI,SWIBIT,FLAG ; SWITCH FILES. CSI$SW APP,APPBIT,FLAG ; APPEND TO LOG FILE' CSI$SW DE, DEBIT,FLAG ; DELETE FILE' CSI$SW NV, NVBIT,FLAG ; NEW VERSIONI- CSI$SW ZE,DOZE,FLAG1 ;ZERO NEW FILE FORMATSE2 CSI$SW UP,DOUP,FLAG1 ;UPDATE TOTALS IN NEW FILES1 CSI$SW NE,NEWBIT,FLAG1 ;DISPLAY ERRORS.LOG FILED; CSI$SW CU,CUBIT,FLAG1 ;USE CURRENT VALUES FOR ERRORS.ACCC< CSI$SW HI,HISBIT,FLAG1 ;USE HISTORY VALUES FOR ERRORS.ACC CSI$ND ; END OF TABLE;S!;TABLES FOR ARGUMENTS ON SWHTCHESI; HARD:B0 CSI$SV DECIMAL,HARLIM,2 ; 2 BYTES FOR HARD LIM CSI$NDDSOFT: 2 CSI$SV DECIMAL,SOFLIM,2 ; 2 BYTES FOR SOFT LIMIT CSI$NDN;MESS:6; CSI$SV ASCII,MESSAGE,2. ; 2. BYTES OF ASCII (LATER); CSI$ND8TEXT: CSI$SV ASCII,TYPTXT,80.;EXPECT ASCII TEXT IN " 00vS" " CSI$NDW .EVENTYPTXT: .BLKB 80.L#GCMDBK:: ; COMMAND LINE BUFFERSS GCMLB$ 3.,ELI,,9.;R!;COMMAND STRING INTERPRETER BLOCK ;ECSIBLK: .BLKB C.SIZE1DEFSY: .ASCII /SY:/ ;DEFAULT USER OUTPUT DEVICEO+DEFSYL = .-DEFSY ;AND ITS LENGTH IN BYTES ;IE; LEGAL SWITCH COMBINATIONS, EACH WORD SIGNIFIES A LEGAL COM. OF SWI.,; END OF TABLE MARKED BY ZEROM; .EVEN$TEMP: .WORD 0 ;TEMPORARY WORK AREALEGCOM: = LOGBIT,BACBIT,RESBIT,SHOBIT,HLBIT,SLBIT,LIMBIT,MESBIT,HELBITT NLGBIT,NLMBIT,APPBIT,SWIBIT LOGBIT!MESBIT LOGBIT!MESBIT !NVBIT  LOGBIT!MESBIT!LIMBITS LOGBIT!MESBIT!LIMBIT !NVBITA LOGBIT !LIMBIT LOGBIT !LIMBIT !NVBIT LOGBIT !NLMBIT LOGBIT !NLMBIT !NVBITC LOGBIT!MESBIT !NLMBIT! LOGBIT!MESBIT !NLMBIT !NVBITW LIMBIT !NLGBIT MESBIT !NLGBITG MESBIT!LIMBIT !NLGBITF MESBIT !NLMBIT!NLGBIT NLMBIT!NLGBIT LOGBIT !NVBITR HLBIT!SLBIT APPBIT!DEBITR SWIBIT!DEBITB SWIBIT!DEBIT!NVBITT SWIBIT!NVBITI .WORD ; END OF TABLE LEGEXT: TLOGBT!TYPBIT ;/LOG/TY TLOGBT!DOUP ;/LOG/UPS TLOGBT!DOUP!TYPBIT ;/LOG/UP/TY TLOGBT!DOZE ;/LOG/ZEG TLOGBT!DOZE!TYPBIT ;/LOG/ZE/TY TSHOBT!CUBIT ;/SH/CU! TSHOBT!HISBIT ;/SH/HI TSHOBT!NEWBIT ;/SH/NE .WORD 0 ;TERMINATE THE TABLE ;I TILUN = 5 ;FOR TERMINAL I/OG .EVEN-ACTION: .WORD 0 ;ACTION CODE FOR CSI$2 MACRO .EVEN;I; COMMAND LINE ERROR MESSAGESH;T .ENABL LC .EVEN:ERRCOD:: .WORD 0 ;ERROR CODE TO RETURN TO CALLING ROUTINE0CNTQUO: .WORD 0 ;COUNT OF NUMBER OF QUOTE MARKS'INPLEN: .WORD 0 ;LENGTH OF INPUT FIELD!&INPSTR: .WORD 0 ;START OF INPUT FIELD(NXTFLD: .WORD 0 ;ADDRESS OF NEXT FIELD 6KEYMSK: .WORD 0 ;MASK ASSOCIATED WITH A GIVEN KEYWORD3KEYLEN: .WORD 0 ;MAXIMUM LENGTH THE KEYWORD CAN BE *KEYADD: .WORD 0 ;ADDRESS OF ASCII KEYWORDSOMASK = 400 ;(100 000 000)CPRMASK = 200 ;(010 000 000)ISYMASK = 150 ;(001 101 000)HMEMASK = 020 ;(000 010 000)CPEMASK = 006 ;(000 000 110)TCOMASK = 001 ;(000 000 001) .ERMASK = PEMASK!PRMASK!MEMASK ;(010 010 110)<ALMASK = 177777 ;(1 111 111 111 111 111) ALL KEYWORDS0KEYWRD: .WORD SOLEN,SOTEXT,SOMASK ;/SO [OFTWARE]) .WORD PRLEN,PRTEXT,PRMASK ;/PR [OCESSOR]A& .WORD SYLEN,SYTEXT,SYMASK ;/SY [STEM]& .WORD MELEN,METEXT,MEMASK ;/ME [MORY]* .WORD PELEN,PETEXT,PEMASK ;/PE [RIPHERAL]' .WORD COLEN,COTEXT,COMASK ;/CO [NTROL]0, .WORD ERLEN,ERTEXT,ERMASK ;/ER [RORS] .WORD ALLEN,ALTEXT,ALMASK ;/ALL .WORD 0,0,0 ;END OF TABLE#SOTEXT: .ASCII /SO/ ;/SO [FTWARE]=SOLEN=.-SOTEXT M$PRTEXT: .ASCII /PR/ ;/PR [OCESSOR]PRLEN=.-PRTEXT-SYTEXT: .ASCII /SY/ ;/SY [STEM_INFORMATION]OSYLEN=.-SYTEXT!METEXT: .ASCII /ME/ ;/ME [MORY]XMELEN=.-METEXT&PETEXT: .ASCII /PE/ ;/PE [RIPHERALS]PELEN=.-PETEXT"COTEXT: .ASCII /CO/ ;/CO [NTROL]COLEN=.-COTEXT"ERTEXT: .ASCII /ER/ ;/ER [RORS]ERLEN=.-ERTEXTALTEXT: .ASCII /ALL/ ;/AL [L]TALLEN=.-ALTEXT .EVEN:CONBUF: .BLKW 5. ;TEMP BUFFER FROM ASCII OCTAL TO BINARY5MSGFMT:: .ASCIZ / %R -- %VA/ ;ERROR MESSAGE TEMPLATE- .EVEN .PAGE .SBTTL MAIN LINE CODE;O-; OUTPUT PROMPT AND CHECK FOR MCR TYPE SYNTAX[;MPARSE::I3 GCML$ #GCMDBK ; OUTPUT ELI> AND WAIT FOR COMMANDY$ BCC 10$ ; BR NO ERROR TO PARSE IT CMPB G.ERR(R0),#GE.EOFE BEQ 5$ ; EOF - EXIT) MOV #GCMER,R3 ; NOT EOF, TYPE ERROR MSGE JMP ERROR5$: ! MOV EXSTA,R0 ; LOAD EXIT STATUST! JMP $EXST ; AND EXIT W/ STATUS-,10$: TST G.CMLD(R0) ; ANYTHING GIVEN TO US? BEQ PARSE ; IF EQ - NO, CSI$1 #CSIBLK,GCMDBK+G.CMLD+2,GCMDBK+G.CMLD BCC 15$ ;BRANCH IF NO ERROR  JMP ERRSYN ;JUMP IF ERROR315$: MOV #CSIBLK,R0 ; MOVE ADDR OF CSI BLOCK TO R0G;$!;PROCESS AN OUTPUT FILE FOR SHOW O;O' MOV #CS.OUT,R3 ;ASSUME NO OUTPUT FILE 2 BITB #CS.EQU,CSIBLK+C.STAT ;WAS THERE A LEAST "="' BEQ NOFILE ;NO. FLAG NO OUTPUT FILES+ BIS #FILOUT,FLAG1 ;FLAG OUTPUT FILE FOUNDX+ MOV #CS.INP,R3 ;ASSUME WE HAVE INPUT SIDE-, CSI$2 #CSIBLK,OUTPUT ;GET OUTPUT FILE SPEC BCS FERR1 ;ERROR GETTING IT;I.;VERIFY THAT THE OUT00~DATADATADATADATADATADATADATADATADATADATAPUT FILE FORMAT IS CORRECT; . BITB #CS.WLD,CSIBLK+C.STAT ;ANY WILD CARDING?! BNE FERR2 ;YES. THAT'S A NO-NOD4 BITB #CS.MOR,CSIBLK+C.STAT ;MORE THAN 1 OUTPUT FILE! BNE FERR3 ;YES. THAT'S A NO-NOU: BITB #CS.NMF!CS.DIF!CS.DVF,CSIBLK+C.STAT ;ANYTHING GIVEN?! BEQ NOFILE ;NO. OUTPUT TO TI:G, BITB #CS.NMF,CSIBLK+C.STAT ;FILENAME GIVEN?# BEQ FERR4 ;NO. FILE MUST APPEARS5 BITB #CS.DVF,CSIBLK+C.STAT ;DEVICE GIVEN FOR OUTPUT?U# BNE 17$ ;YES. USE WHAT WAS GIVENE4 BISB #CS.DVF,CSIBLK+C.STAT ;ASSUME DEVICE WAS GIVEN2 MOV #DEFSYL,CSIBLK+C.DEVD ;AND THIS IS ITS LENGTH4 MOV #DEFSY,CSIBLK+C.DEVD+2 ;AND THIS IS ITS ADDRESS617$: BITB #CS.DIF,CSIBLK+C.STAT ;UFD GIVEN FOR OUTPUT?# BNE 20$ ;YES. USE WHAT WAS GIVEN!' CLR CSIBLK+C.DIRD ;DEFAULT UFD LENGTHE;#;OPEN THE OUTPUT FILE FOR LATER USEB; B20$: OPEN$W #USRFDB,#USRLUN,#CSIBLK+C.DSDS ;OPEN THE FILE FOR USE BCC CSIXIT ;FILE OPENM;============================================================================B';ERROR HANDLERS FOR OUTPUT FILE ERRORS.W;G MOV #OPNERR,R3 ;OPEN ERROR! JMP ERROR ;GO HANDLE THE ERRORE%FERR1: MOV #FILINV,R3 ;BAD FILE SPECD! JMP ERROR ;GO HANDLE THE ERRORA)FERR2: MOV #WLDFIL,R3 ;WILDCARDS PRESENTU! JMP ERROR ;GO HANDLE THE ERRORI,FERR3: MOV #XSFIL,R3 ;TOO MANY OUTPUT SPECS! JMP ERROR ;GO HANDLE THE ERROR$)FERR4: MOV #FILER,R3 ;NO FILE NAME GIVEN ! JMP ERROR ;GO HANDLE THE ERRORP/NOFILE: BIC #FILOUT,FLAG1 ;SHOW NO OUTPUT FILE=5CSIXIT: MOVB R3,CSIBLK+C.TYPR ;SET UP FOR GETTING ANYU ;DEVICE NAMES FROM THE# ;COMMAND LINE.R+ MOV R3,ACTION ;SAVE FOR OTHER CSI$2 CALLSM1 CSI$2 #CSIBLK,,#CMDSWT ;TYPE DYNAMICLY FILLED INN BCC GOODPR ;NO PROBLEMS FOUND'ERRSYN: MOV #SYNER,R3 ;FILE SPEC ERRORO JMP ERROR;O2; HERE IF GOOD PARSE - CHECK FOR A NEGATIVE SWITCH;E20$:GOODPR:L, MOV #NEGSWI,R2 ; GET THOSE THAT MAY BE NEG/ COM R2 ; CHANGE TO THOSE THAT MAY NOT BE NEGO( MOV C.MKW1(R0),R1 ; GET GIVEN SWITCHES1 BIC R2,R1 ; CLR OFF EVERYTHING BUT LOG AND LIMT BEQ 22$ ; BR IF NO LOG OR LIM BIT #LOGBIT,C.MKW1(R0) ; LOG? BEQ 21$ ; BR NO' BIT #LOGBIT,C.MKW2(R0) ; NEGATIVE LOG?D BNE 21$ ; BR NO BIC #LOGBIT,FLAG ; CLR LOG BIT" BIS #NLGBIT,FLAG ; SET NOLOG BIT$21$: BIT #LIMBIT,C.MKW1(R0) ; LIMIT? BEQ 22$ ; BR - NO" BIT #LIMBIT,C.MKW2(R0) ; NEG LIM? BNE 22$ ; BR NO" BIC #LIMBIT,FLAG ; CLEAR LIM BIT" BIS #NLMBIT,FLAG ; SET MOLIM BIT;T; HERE TO LOAD FILENAME(S); 22$: MOV FLAG,R1 ; GET FLAG;( BIC #MULDEV, R1 ; CAN WE HAVE > 1 DEV? BEQ 40$ ; BR IF YES;M0; HERE WHEN ONE OUTPUT FILE REQUIRED OR OPTIONAL;# MOV #OUTFIL,R1 ; GET INPUT BUFFERG2 BITB #CS.DVF!CS.DIF!CS.NMF,C.STAT(R0) ;FILE SPEC? BNE 23$ ; BR IF YES/ CLR (R1)+ ; FILL IN 0 LENGTH FOR DEV AND UICI" CLRB (R1) ; " " " FILE NAME JMP 52$;0; FILE SPECIFIED;$!23$: INC NODEV ; SET ONE DEVICEE6 BITB #CS.DVF,C.STAT(R0) ; PARSE FILE - DEV SPECIFIED? BEQ 25$ ; NO - BR3 MOVB C.DEVD(R0),(R1) ; MOV LENGTH OF DEV IN BYTES % INCB (R1) ; ...INCLUDING THE COLON;% MOVB (R1)+,R2 ; LENGTH INTO COUNTERF' MOV C.DEVD+2(R0),R3 ; MOV ADDR OF DEVL+24$: MOVB (R3)+,(R1)+ ; MOV BYTE OF DEVICEF SOB R2,24$ ; LOOP BR 251$25$:! CLRB (R1)+ ; NO DEV - 0 LENGTHL251$:L) BITB #CS.DIF,C.STAT(R0) ; DIR SPECIFIED?  BEQ 30$ ; NO - BR1 MOVB C.DIRD(R0),(R1) ; LOAD LENGTH OF DIRECTORYT% MOVB (R1)+,R2 ; LENGTH INTO COUNTER; MOV C.DIRD+2(R0),R3 ; ADDR)27$: MOVB (R3)+,(R1)+ ; MOVE BYTE OF DIR  SOB R2,27$ ; LOOP BR 31$30$:! CLRB (R1)+ ; NO UIC - 0 LENGTHM31$:. BITB #CS.NMF,C.STAT(R0) ; FILENAME SPECIFIED? BNE 32$ ; YES - BRL CLRB (R1)+ ; NO 0 LENGTHV BR 52$ ; BRANCH OUT OF HERE32$:) MOVB C.FILD(R0),(R1) ; LOAD NAME LENGTH0# MOVB (R1)+,R2 ; LENGTH TO COUNTERT& MOV C.FILD+2(R0),R3 ; LOAD NAME ADDR$33$: MOVB (R3)+,(R1)+ ; MOVE A BYTE SOB R2,33$ ; LOOP BR 52$,; =; HERE WHEN MULTIPLE FILES SWITCH SPECIFIED (DEV. SPECS ONLY) 0; ALSO HAVE THE POSSIBILITY THAT NO SWITCH GIVEN;P40$:- MOV #OUTDEV, R4 ; BUFFER FOR OUT00S"PUT DEVICES, MOV #MAXDEV,R5 ; MAX NUMBER OF DEV ALLOWED45$:/ BITB #CS.DIF,C.STAT(R0) ; DIRECTORY SPECIFIED?N BNE 455$ ; BR IF YESO% BITB #CS.NMF,C.STAT(R0) ; FILE NAME?  BEQ 46$ ; BR IF NOM; +; ERROR - NAME AND OR DIRECTORY SPECIFIED(;,455$:O$ MOV #SYNER, R3 ; REQ. DEV NAM ONLY* JMP ERROR ; BACK TO START AFTER ERR.MSG; ; FILE SPEC OK;P46$:" BITB #CS.DVF,C.STAT(R0) ; DEVICE? BEQ 50$ ; BR IF NOS INC NODEV ; INCREM NO. DEVP! MOV C.DEVD(R0),R3 ; MOVE LENGTHF. MOV C.DEVD+2(R0),R2 ; MOVE 2 LETTER MNEMONIC MOVB (R2)+,(R4)+5 MOVB (R2)+,(R4)+.* SUB #2,R3 ; SUBTRACT FOR 2 LETTER MNEM.( BGT 47$ ; BR IF SOMETHING AFTER MNEM.! CLR (R4)+ ; INSERT ZERO IF NOTM BR 49$ ; GET NEXT;D;CONVERT AND MOVE IN UNIT NO.5;O'47$: MOV C.DEVD+2(R0),R1 ; GET ADDR OFJ% CMPB (R1)+,(R1)+ ; NEXT AFTER MNEM.G- MOV #CONBUF,R2 ; START OF CONVERSION BUFFER.)48$: MOVB (R1)+,(R2)+ ; MOVE UNIT NUMBER SOB R3,48$ ; TO CONVERT' MOVB #11,(R2) ; MOVE A TAB TO SAY ENDM' MOV R0,-(SP) ; SAVE ADDR OF CSI TABLEN. MOV #CONBUF,R0 ; GET START OF CONVERT BUFFER CALL $COTB ; CONVERT  MOV R1,(R4)+ ; MOVE IN NUMBERS$ MOV (SP)+,R0 ; RESTORE CSI POINTER*49$: BITB #CS.MOR,C.STAT(R0) ; MORE FILES? BEQ 50$ ; NO - BR- MOVB ACTION,C.TYPR(R0) ;SET UP BLOCK FOR USE ( CSI$2 ,,#CMDSWT ;GET ANOTHER FILE SPEC SOB R5,45$ ; LOOP/ MOV #MAXER,R3 ; TYPE MAXIMUM DEVICES EXCEEDED, JMP ERROR50$:;MH; THE ONLY "MULTIPLE DEVICE" SWITCH THAT ALLOWS NO DEVICES (ALL DEVICES); IS SHOW... CHECK THIS...;  TST NODEV ; 0 DEVICES GIVEN?T! BNE 52$ ; BR IF MORE THAN ZEROT+ MOV #MULDEV,R1 ; R1 HAS ALL SWITCHES THATE0 BIC #SHOBIT,R1 ; ALLOW MULT. DEV BUT NOT 0 DEV- BIT R1, FLAG ; WAS COMMAND ONE OF THESE?; BEQ 52$ ; YES- BR -OK51$:/ MOV #SYNER,R3 ; NOT SHO AND 0 DEVICES - ERRORA JMP ERROR;CE; HERE, ALL FILES PROCESSED--- NOW, CHECK SYNTAX AS FAR AS ELI CARES ,;J52$:) TST FLAG ; MUST AT LEAST BE ONE SWITCHS$ BEQ 51$ ; BR IF NONE TO SYNT. ERR6 MOV #LEGCOM,R1 ; MOVE ADDR OF LEGAL SWI COMBINATIONS55$: CMP FLAG,(R1) ; MATCH?$ BEQ 60$ ;GO CHECK EXTENSION FLAGS TST (R1)+ ; INCREMENT POINTER, BNE 55$ ; LOOP IF NOT END OF COMBINATIONS057$: MOV #ILLER,R3 ;TYPE ILL SWITCH COMBINATION JMP ERROR858$: MOV #NOFEAT,R3 ;SWITCH NOT SUPPORTED UNDER FEATURE! JMP ERROR ;ISSUE ERROR MESSAGEL60$:2 BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT ENABLED?* BNE 601$ ;YES. KEEP CURRENT PROCESSING, MOV FLAG1,TEMP ;COPY OF FLAGS TO WORK WITH? BIC #,TEMP ;CLEAR ALLOWABLE FLAGSC* BNE 58$ ;BAD FLAG. ISSUE ERROR MESSAGE601$:I# MOV FLAG1,TEMP ;COPY TO WORK WITHT2 BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT ENABLED? BEQ 605$ ;NO 7 BIC #^C,TEMPT BEQ 70$ ;NONE SET BR 609$ ;!605$: BIC #^C,TEMPS$ BEQ 70$ ;IF NONE SET, DON'T CHECK,609$: BIT #LOGBIT,FLAG ;/LOG COMMAND GIVEN? BEQ 61$ ;NO- BIS #TLOGBT,TEMP ;YES. RECORD IN TEMP FLAGSR*61$: BIT #SHOBIT,FLAG ;/SH COMMAND GIVEN? BEQ 62$ ;NO- BIS #TSHOBT,TEMP ;YES. RECORD IN TEMP FLAGSR+62$: MOV #LEGEXT,R1 ;LEGAL EXTENSION TABLE '63$: CMP TEMP,(R1) ;TEMP FLAG MATCHUP? ' BEQ 70$ ;YES. VALID COMBINATION THENB' TST (R1)+ ;POINT TO NEXT TABLE ENTRYT* BNE 63$ ;AND CHECK THAT IF THERE IS ONE% BR 57$ ;NO MATCH. MUST BE INVALIDS;B?; HERE WHEN SWITCH COMB IS OK. NOW CHECK NECESSARY FILES GIVEN ;M70$:1 BIT #BACBIT!APPBIT!SWIBIT,FLAG ; FILENAME REQ'D?R BEQ 75$ ; BR - NO# CMP #1,NODEV ; IS ONE FILE GIVEN?? BEQ 75$ ; BR YESS% MOV #FILER,R3 ; TYPE MUST HAVE FILEG CALL ERROR75$:; F; CHECK THAT IF /HL OR /SL, LIMIT IS LESS THAN 377, IF NOT MAKE IT 377;$# BIT #HLBIT,FLAG ; HARD LIMIT SET?T BEQ 80$ ; BR IF NOT MOV HARLIM,R1 ; GET HARD LIMIT# SUB #377,R1 ; SUB 377 FROM LIMIT  BMI 80$ ; BR IF OKS& MOV #377,HARLIM ; IF NOT, MAKE IT OK80$: BIT #SLBIT,FLAG ; SOFT LIMIT?: BEQ 90$ ; NO BRANCH MOV SOFLIM,R1 ; GET SOFT LIMIT SUB #377,R1 BMI 90$00DATADATADATADATADATADATADATADATADATADATA ; BR IF OK & MOV #377,SOFLIM ; IF NOT, MAKE IT OK$90$: RETURN ; RETURN TO MAIN LINE .PAGE .SBTTL ERROR PROCESSING;+A; TYPES ERROR MESSAGE AND IF FATAL EXITS, OTHERWISE, GOES BACK TOT7; START OF PROGRAM. R3 POINTS TO : LENGTH, STATUS, MSG;-ERROR::1! CCML$ #GCMDBK ; CLOSE GCML FILE;* CALL ERRPRI ;PRINT ERROR WITH TASK NAME0 MOV #EX$ERR,EXSTA ; EXIT STATUS IS NOW 'ERROR'  BIT #ER.FAT,R4 ; FATAL ERROR BNE 15$ ; IF NE THEN YES3 MOV #EX$WAR,EXSTA ; EXIT STATUS IS NOW 'WARNING' * JMP .RSTAR ; GOTO START FOR NEXT COMMAND 15$: " MOV EXSTA,R0 ; EXIT WITH STATUS  JMP $EXST ;  S7 .SBTTL GETFLT PROCESS THE LOG.ERR FILTER SWITCH (/TY)WK;==========================================================================J;THIS ROUTINE SCANS THROUGH THE USER SPECIFIED /TY KEYWORDS AND CONSTRUCTS3;THE ACTUAL FILTER MASK THAT IS PASSED ONTO ERRLOG. K;==========================================================================V-GETFLT::CALL $SAVAL ;SAVE ALL THE REGISTERS & MOV #TYPTXT,R5 ;INPUT KEYWORD BUFFER CLR CNTQUO ;QUOTE COUNTER5$: TSTB (R5) ;END OF STRING?X BEQ 10$ ;YES.! CMPB (R5)+,#'" ;WAS IT A QUOTE?  BNE 5$ ;NO. KEEP GOING. INC CNTQUO ;KEEP TRACK OF IT.$ BR 5$ ;AND KEEP LOOKING FOR MORE./10$: DEC R5 ;POINT TO LAST NON-NULL CHARACTERY CMP CNTQUO,#2 ;PROPER NUMBER?T' BNE 20$ ;NO. CHECK FOR 0 QUOTE COUNTG+ CMPB (R5),#'" ;WAS LAST NON-NULL A QUOTE?=* BNE 30$ ;NO. MUST BE WHERE IT SHOULDN'T/ CMPB TYPTXT,#'" ;WAS FIRST CHARACTER A QUOTE?T* BNE 30$ ;NO. MUST BE WHERE IT SHOULDN'T BR 40$ ;QUOTED STRING OK.120$: TST CNTQUO ;WERE ANY QUOTES ENTERED AT ALL'* BEQ 40$ ;NO. THEN IT IS OK TO GO AHEAD830$: MOV #SYNER,ERRCOD ;SYNTAX ERROR. QUOTES MESSED UP& SEC ;INDICATE AN ERROR HAS OCCURED$ RETURN ;AND RETURN TO THE CALLER<40$: MOV #TYPTXT,NXTFLD ;START AT BEGINNING OF FILTER INPUT) TST CNTQUO ;WERE ANY QUOTES SPECIFIED?Q BEQ 50$ ;NO. + INC NXTFLD ;YES. SKIP OVER LEADING QUOTET&50$: CALL GETFLD ;GET AN INPUT FIELD' BCS 200$ ;NO MORE SO TIME TO GET OUT+;========================================== %;SPECIAL CASING (SOME KEYWORDS NEED 2Q*; CHARACTERS TO DISTINGUISH; THEM)+;==========================================T' MOV INPSTR,R1 ;GET USER INPUT ADDRESSE1 CMPB (R1),#'P ;SPECIAL SWITCH (2 CHAR REQUIRED) " BEQ 60$ ;YES. CHECK THE LENGTH1 CMPB (R1),#'S ;SPECIAL SWITCH (2 CHAR REQUIRED)O! BNE 80$ ;NO. USE WHAT IS THEREE260$: CMP INPLEN,#2 ;DID USER GIVE AT LEAST 2 CHAR" BGE 80$ ;YES. USE WHAT IS THERE' MOV #AMBPKT,ERRCOD ;AMBIGUOUS KEYWORD= BR 90$ ;RETURN AN ERROR280$: CALL SMATCH ;SEARCH KEYWORD TABLE FOR MATCH BCC 100$ ;MATCH WAS FOUND' MOV #UNPKT,ERRCOD ;NO KEYWORD MATCHED=+90$: SEC ;INDICATE AN ERROR HAS OCCURRED $ RETURN ;AND RETURN TO THE CALLER1100$: BIS KEYMSK,FILTER ;SET THE NECESSARY FLAGS ) BR 50$ ;AND GO GET ANOTHER INPUT FIELDC)200$: CLC ;INDICATE NO ERRORS OCCURRED $ RETURN ;AND RETURN TO THE CALLER E1 .SBTTL GETFLD FROM THE USER ON THE /TYPE SWITCHEK;==========================================================================CH;THIS ROUTINE STEPS THROUGH THE INPUT BUFFER AND, UPON SUCCESSIVE CALLS,8;RETURNS THE NEXT FIELD TO CHECK IN THE KEYWORD TABLE. K;==========================================================================I7GETFLD: MOV NXTFLD,R4 ;GET STARTING POSITION FOR FIELDD& MOV R4,INPSTR ;COPY IT FOR LATER USE* BEQ 30$ ;NONE THERE SO END OF INPUT HIT* CLR INPLEN ;FIELD LENGTH INITIALIZATION)5$: TSTB (R4) ;IS THE CHARACTER A NULL?=+ BEQ 10$ ;YES. END OF FIELD AND INPUT HIT= CMPB (R4),#', ;WAS IT A COMMA?% BEQ 20$ ;YES. END OF FIELD WAS HITA CMPB (R4),#'" ;WAS IT A QUOTE?, BEQ 10$ ;YES. END OF FIELD AND INPUT HIT.- INC INPLEN ;SHOW FIELD WITH ONE MORE IN IT=) INC R4 ;NEXT CHARACTER IN INPUT BUFFER ' BR 5$ ;AND KEEP CHECKING FOR THE END 210$: MOV #-1,R4 ;INITIALIZE FOR NEXT GETFLD CALL320$: INC R4 ;SKIP PAST TERMINATOR (OR 0 FOR LAST) . MOV R4,NX00 S"TFLD ;AND SAVE IT FOR THE NEXT CALL, CLC ;INDICATE FIELD INFORMATION RETURNED$ RETURN ;AND RETURN TO THE CALLER+30$: SEC ;INDICATE NO MORE FIELDS REMAIN " RETURN ;AND RETURN TO THE USER 2 .SBTTL SMATCH THE KEYWORD GIVEN WITH TABLE ENTRYL;===========================================================================H;THIS ROUTINE ATTEMPTS TO MATCH THE FIELD GIVEN BY THE USER WITH A VALIDJ;KEYWORD. IF A MATCH IS FOUND, THE APPROPRIATE MASK FOR THE FILTER OPTIONM;IS RETURNED. A MATCH IS ONLY POSSIBLE IF THE USER SPECIFIED OPTION MATCHES TJ;EXACTLY THE FIRST N CHARACTERS OF A KEYWORD WHERE N IS THE LENGTH OF THE F;USER SPECIFIED OPTION. SOME OPTIONS REQUIRE AT LEAST 2 CHARACTERS BE*;SPECIFIED. OTHER OPTIONS ONLY REQUIRE 1.K;===========================================================================2SMATCH: MOV #KEYWRD,R4 ;GET ADDR OF KEYWORD TABLE010$: TST (R4) ;ARE WE AT THE END OF THE TABLE?# BEQ 30$ ;YES. NO MATCH WAS FOUNDK2 MOV (R4)+,KEYLEN ;GET THE MAXIMUM KEYWORD LENGTH0 MOV (R4)+,KEYADD ;GET THE KEYWORD TEXT ADDRESS0 MOV (R4)+,KEYMSK ;GET THE MASK TO USE ON MATCH. CMP INPLEN,KEYLEN ;IS A MATCH EVEN POSSIBLE?$ BGT 10$ ;NO. GO TRY ANOTHER ENTRY! MOV INPLEN,R5 ;COMPARISON COUNTT& MOV INPSTR,R1 ;ADDRESS OF USER INPUT( MOV KEYADD,R2 ;ADDRESS OF KEYWORD TEXT)20$: CMPB (R1)+,(R2)+ ;CHARACTERS MATCH?G$ BNE 10$ ;NO. GO TRY ANOTHER ENTRY' DEC R5 ;ONCE LESS CHARACTER TO CHECKQ% BGT 20$ ;AND TRY ANOTHER CHARACTER( CLC ;INDICATE KEYWORD MATCHW$ RETURN ;AND RETURN TO THE CALLER'30$: SEC ;INDICATE NO MATCH OCCURRED " RETURN ;AND RETURN TO THE USER PERRPRI::" MOV R0,-(SP) ;SAVE WORK REGISTER" MOV R1,-(SP) ;SAVE WORK REGISTER$ MOV R2,-(SP) ;SAVE A WORK REGISTER. MOV #BLKARG,R0 ;GET POINTER TO ARGUMENT LIST' MOV TASK,(R0)+ ;PUT TASK NAME IN LIST,# MOV (R3),(R0) ;GET PARAMETER WORD ) BIC #177400,(R0)+ ;CLEAR ALL BUT LENGTH " MOV (R3)+,R4 ;GET PARAMETER WORD# BIC #177400,R4 ;GET SEVERITY FLAG ( MOV R3,(R0) ;PUT MESSAGE ADDR IN LIST MOV #BUFOUT,R0 ;OUTPUT BUFFER  MOV #MSGFMT,R1 ;FORMAT! MOV #BLKARG,R2 ;ARGUMENT BUFFERS! CALL $EDMSG ;BUILD THE MESSAGEA9 QIOW$S #IO.WVB,#5,#2,,,,<#BUFOUT,R1,#040> ;TELL THE USER,) MOV (SP)+,R2 ;RESTORE THE WORK REGISTERG) MOV (SP)+,R1 ;RESTORE THE WORK REGISTERS) MOV (SP)+,R0 ;RESTORE THE WORK REGISTER, RETURNP .END BIC #177400,(R0)+ ;CLEAR ALL BUT LENGTH " MOV (R3)+,R4 ;GET PARAMETER WORD# BIC #177400,R4 ;GET SEVERITY FLAG ( MOV R3,(R0) ;PUT MESSAGE 1 .TITLE ERRSHO - SUBROUTINE OF ERROR LOGGING TASKV; .IDENT /V02.01/T;M; COPYRIGHT (c) 1981, 1985 BY(; DIGITAL EQUIPMENT CORPORATION, MAYNARD'; MASSACHUSETTS. ALL RIGHTS RESERVED.;;LA; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USEDRA; AND COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSEGA; AND WITH THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THISTA; SOFTWARE OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR A; OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO ANDO1; OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERED.M; A; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUTAA; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION.;SA; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OFM<; ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.;R;T; MODULE ERRSHO.MACO;A; VERSION: V02.01O;S; AUTHOR: S. ADAMS;R ; DATE: '81 ; ; FUNCTION OF THIS MODULE:;H; PREVIOUSLY MODIFIED BY:O; ; S. ADAMST;S;W; MODIFIED BY:;F; J. MELVIN 21-NOV-84 V02.00I1; JJM101 DEFINE NEW ENTRY POINT FOR OLD DISPLAYO;E; J. MELVIN 03-JAN-85 V02.01 ,; JJM102 ALLOW OLD DISPLAY TO GO TO A FILE;OG; *********************************************************************MG; WARNING CODE IN THIS MODULE REMAPS APR6 AND THEREFORE MUST BE IN APR5 G; ********************************************************************* ;E;; THIS CONTAINS THE SUBROUTINES THAT DISPLAY00 DATADATADATADATADATADATADATADATADATADATA INFORMATION ONF+; THE CURRENT OPERATION OF THE ERROR LOGGERD;:D; INPUT - R4 CONTAINS THE ADDRESS OF OFFSET 0 IN CURRENT COMMAND EMB;O; ROUTINES AND THEIR FUNCTIONS:0;A(; SHO - SHOW EMB FOR SPECIFIED DEVICE(S)#; SHOALL - SHOW EMB FOR ALL DEVICES*#; WRITIT - FORMAT AND OUTPUT A LINE*;*; MACROS .MCALL GTIM$S,EPKDF$  .MCALL QIOW$S,QIOW$,DIR$ ( .MCALL PUT$,CLOSE$ ;FOR OUTPUT TO FILE. TILUN=1 ; LUN FOR NON-ERROR TERMINAL OUTPUT;*AATDT: QIOW$ IO.ATT,TILUN,2 ; DPB FOR ATTACH AND DETACH OPERATIONSN EPKDF$ .ENABL LC .NLIST BEXR;L-UCBER: .ASCIZ /%N%2A%O: Device not in system/F4ELDER: .ASCIZ /%N%2A%O: Not an Error Logging device/;R/SHOHDR: .ASCIZ /%N Error Logging Status %Y %3Z/V,SHO1: .ASCIZ /%NLogging: %I Limiting: %I/ON: .ASCIZ /On /OFF: .ASCIZ /Off/ 7SHO2: .ASCIZ /%NLog File: %VA File ID: %2A%O: %O,%O/!SHO3: .ASCIZ /%NBackup File: %VA/INONE: .ASCIZ /None/R4SHO4: .ASCII /%2NDevice Hard Error Soft Error QIO%N/2SHO4A: .ASCIZ $Name Count/Limit Count/Limit Count$SHO5L: .ASCII $%N$4SHO5: .ASCII $%2A%O: %16<%I%M./%M.%16>%16<%I%M./%M.$ .ASCIZ $%16>%T. %I$SHO5A: .ASCIZ /(Offline)/c.EVEN?DEVS: .WORD 0 ; NUMBER OF DEVICES IN A SHOW COMMAND (TEMPORARY)N%LASTDV: .WORD 0 ; LAST DEVICE PRINTEDZ0EDTOUT: .BLKW 60. ; AREA FOR OUTPUT FROM EDTMSG7TEMP1: .BLKB 36. ; TEMP SPACE FOR FILENAME AND FILE IDN?TEMP2: .BLKB 10. ; AND FOR FLAG INDICATING SHO ALL IN PROGRESSv .PAGE .SBTTL MAIN LINE CODE;?; SHO OUTPUTS INFORMATION CONCERNING LOGGING STATUS TO TERMINALI;%1; INPUT: R4 POINTS TO BEGINNING OF DATA SUBPACKETM;M; PRINT FIRST HEADER LINE;H(SHOWV1:: ;NEW ENTRY POINT FOR DISPLAY+ GTIM$S #OUTFIL ; GET BINARY TIME AND DATEN BCC 10$ RETURNA10$:& MOV #IO.ATT, ATDT+Q.IOFN ; SET ATTACH DIR$ #ATDT ; ATTACH TERMINAL, MOV #EDTOUT,R0 ; POINT TO THE OUTPUT BUFFER0 MOV #SHOHDR,R1 ; POINT TO THE CONVERSION STRING( MOV #OUTFIL,R2 ; POINT TO THE TIME DATA* CALL WRITIT ; FORMAT AND OUTPUT THE LINE;N"; OUTPUT THE HEADER LOG/LIM STATUS;T, MOV #EDTOUT,R0 ; POINT TO THE $EDMSG BUFFER& MOV #SHO1,R1 ; POINT TO $EDMSG STRING+ MOV #OUTFIL,R2 ; POINT TO THE ARGUMENT BUFF MOV #ON,(R2) ; ASSUME LOG ONG BIT #ES.LOG, $ERFLA ; IS IT ON? BNE 20$ ; BR IF YES# MOV #OFF,(R2) ; LOG IS OFFA"20$: MOV #ON,2(R2) ; ASSUME LIM ON BIT #ES.LIM, $ERFLA ; LIMITING? BNE 30$ ; BR IF YESR! MOV #OFF,2(R2) ; IF NOT, SAY OFFG.30$: CALL WRITIT ; FORMAT AND OUTPUT THE LINE;R"; OUTPUT LOG FILE NAME AND FILE ID;% BIT #ES.LOG, $ERFLA ; IS LOGGING ON? BEQ 40$ ; BR IF NO$ MOV #TEMP1, R2 ; DESTINATION BUFFER" CALL $SWSTK, 35$ ; GOTO SYS STATE .IF DF R$$MPLO% MOV $ERRX, KISAR6 ;; MAP TO FILENAMEU BEQ 34$ ;; BR IF NO MAPPINGA.ENDCT CLR (R2) ;; INIT TO ZERO SIZEV CLR R3 ;; ...I MOVB $ERLOF, R3 ;; GET SIZE BEQ 34$ ;; BR IF NONEM* MOV R3, (R2)+ ;; MOVE SIZE TO TEMP BUFFER- MOV #$ERLOF+1, R0 ;; MOVE START ADDR OF NAME 32$: MOVB (R0)+, (R2)+ ;; MOVE NAMER SOB R3, 32$ ;; LOOPE" MOV #TEMP2, R2 ;; GET TEMP BUFFER' MOV #$ERFID, R3 ;; GET ADDR OF FILE IDO$ MOV (R3)+, (R2)+ ;; MOVE IN FILE ID MOV (R3)+, (R2)+ ;; O MOV (R3)+, (R2)+ ;; $ MOV (R3)+, (R2) ;; 34$: RETURN ; BACK TO USER&35$: MOV #OUTFIL, R2 ; POINT TO BUFFER MOV TEMP1, (R2)+ ; SIZE MOV #TEMP1+2, (R2)+ ; ADDRESS$ MOV #TEMP2, R3 ; POINT TO DEV. MNE., MOV R3,(R2)+ ; POINT TO THE DEVICE MNEMONIC" TST (R3)+ ; POINT TO UNIT NUMBER& MOV (R3)+,(R2)+ ; INCLUDE UNIT NUMBER! MOV (R3)+,(R2)+ ; ...AND FILE ID) MOV (R3)+,(R2)+ ; ...AND SEQUENCE NUMBERE MOV #EDTOUT, R0 MOV #SHO2, R1' MOV #OUTFIL,R2 ; POINT TO THE ARG BUFFV* CALL WRITIT ; FORMAT AND OUTPUT THE LINE;V; OUTPUT BACKUP FILE NAMET; G40$: BIT #ES.LOG, $ERFLA ; IS LOGGING ON? (WE WANT TO SEE ABOUT BACKUP)) BEQ 70$ ; BR IF NO$ MOV #TEMP1, R2 ; POINT TO TEMP BUFF CALL $SWSTK, 46$ ; SYS STATER .IF DF R$$MPLT& MOV $ERRX, KISAR6 ;; MAP TO FILENAMES BEQ 42$ ;; BR IF NO MAPPING+.ENDCU( TSTB $ERBAF ;; IS THERE A BACKUP FILE? BNE 44$ ;; BR IF YES&4200 S"$: MOV @$HEADR, R3 ;; SET USER CARRY INC 6(R3) ;; ... RETURN ; TO USER STATE !44$: CLR R3 ;; INIT SIZE TO ZEROO MOVB $ERBAF, R3 ;; GET SIZE MOV R3, (R2)+ ;; FILL IN SIZE& MOV #$ERBAF+1, R1 ;; GET NAME ADDRESS&45$: MOVB (R1)+, (R2)+ ;; MOVE IN NAME SOB R3, 45$ ;; LOOPE RETURN ;; BACK TO USERF46$: BCC 50$ ; BR IF WE GOT FILE ' MOV #OUTFIL,R2 ; POINT TO THE ARG BUFFF! MOV #4, (R2)+ ; LENGTH OF 'NONE'P! MOV #NONE, (R2) ; ADDR OF 'NONE'H BR 60$K"50$: MOV #OUTFIL, R2 ; GET ADDRESS MOV TEMP1, (R2)+; MOV #TEMP1+2, (R2)C60$:' MOV #OUTFIL,R2 ; POINT TO THE ARG BUFF: MOV #EDTOUT, R0 MOV #SHO3, R1 V* CALL WRITIT ; FORMAT AND OUTPUT THE LINE;L); NOW OUTPUT THE HEADER FOR THE MAIN BODYD;S070$: MOV #EDTOUT,R0 ; POINT TO THE $EDMSG BUFFER# MOV #SHO4,R1 ; POINT TO THE STRINGU CLR R2 ; NO ARGUMENT BUFFERE* CALL WRITIT ; FORMAT AND OUTPUT THE LINE;B*; FILL IN INFO ABOUT ERROR LOGGING DEVICES;#F; FIRST, FILL IN BUFF WITH NAME AND UNIT NO. OF DEVICE AND GET ITS UCB; CLR TEMP1 ; ASSUME NOT SHO ALLPART2:0 CLR LASTDV ; INIT THE LAST DEVICE STORAGE AREA, MOV (R4)+, DEVS ; GET NUMBER OF SHO DEVICES% BNE 10$ ; NONZERO -> DEVICES FOLLOWO ; ZERO -> SHOW ALL DEVICES INC TEMP1 ; SHO ALLD* CALL SHOALL ; CREATE THE LIST OF DEVICES1 MOV #OUTDEV,R4 ; POINT TO THE NEWLY CREATED LISTE BR PART2 ; ...AND TRY AGAINM10$:# MOV #OUTFIL, R5 ; GET BUFFER ADDR.A- MOV R4,(R5)+ ; MOVE DEV NAME ADDRESS TO BUFFN- MOV (R4)+, R2 ; ALSO TO INPUT REG FOR GETUCBI% MOV R2,R3 ; SAVE MNEMONIC FOR LATERO CLR (R5) ; SET UP FOR BISB+ BISB (R4),(R5)+ ; MOVE UNIT NUMBER TO BUFF  TSTB (R5)+ ; FIX UP POINTERS) MOVB (R4)+, R1 ; UNIT TO INPUT TO GETUCB ' TSTB (R4)+ ; POINT TO NEXT DEV IN EMB 1 CALL GETUCB ; GET UCB ADDR FOR DEV IN R1 AND R2C' BCS 20$ ; BR IF NOT ERROR LOGGING DEVC TST R0 ; DID WE GET A UCB. BNE 30$ ; BR IF NO M;#& MOV #UCBER, R1 ; WHEN NO UCB,SAY THIS BR 25$O620$: TST TEMP1 ; IF DOING SHOALL AND A DEVICE WAS MSD( ; IT IS NOT NECESS. ERRLOGING DEVICE' BNE 80$ ; DON'T DISPLAY IT ON SHO ALLO2 MOV #ELDER, R1 ; MESSAGE NOT AN ERRLOGING DEVICE-25$: MOV #EX$WAR, EXSTA ; AND IT'S A WARNINGR BR 70$ ; BR TO PRINT MESSAGE ;)30$:;TD; HERE, WE GOT A GOOD UCB .. SET UP REST OF ARGUMENT BUFFER TO EDMSG; WITH LIMITS AND COUNTS;O CALL $SWSTK, 60$T$ .IF DF R$$MPL ;M PLUS CONDITIONAL .IFT ; RSX11M -PLUS* CALL $MUCB1 ;; PROCESS THIS IN APR5 LAND0 BITB #US.OFL!US.PDF,U.ST2(R0) ;; DEVICE ONLINE? .IFF ; THIS IS FOR RSX11M@ CMPB U.ERHC(R0),U.ERHL(R0) ;; CHECK THE VALUE AGAINST THE LIMIT BLO 32$ ;; IF LO - O.K. SO FAR- MOV #SHO5C,(R5)+ ;; SAY THE LIMIT WAS BROKENN" BR 34$ ;; JOIN COMMON CODE BELOW-32$: MOV #SHO5B,(R5)+ ;; LIMIT WAS NOT BROKEN.B34$: MOVB U.ERHC(R0), (R5)+ ;;FIRST HARD COUNT/LIM, SOFT COUNT/LIM CLRB (R5)+K MOVB U.ERHL(R0), (R5)+ CLRB (R5)+I@ CMPB U.ERSC(R0),U.ERSL(R0) ;; CHECK THE VALUE AGAINST THE LIMIT" BLO 36$ ;; IF LO - O.K. TO EXIT - MOV #SHO5C,(R5)+ ;; SAY THE LIMIT WAS BROKEN1" BR 38$ ;; JOIN COMMON CODE BELOW-36$: MOV #SHO5B,(R5)+ ;; LIMIT WAS NOT BROKEN;38$: MOVB U.ERSC(R0), (R5)+ CLRB (R5)+Y MOVB U.ERSL(R0), (R5)+B CLRB (R5)+N, MOV U.IOC+2(R0),IOCBUF ;; REVERSE THE ORDER- MOV U.IOC(R0),IOCBUF+2 ;; ...OF THE LONGWORD) CLR (R5)+ ;; RESERVE A SPACE) BITB #US.OFL,U.ST2(R0) ;; DEVICE ONLINE?R .ENDC ; R$$MPL BEQ 40$ ;; IF EQ - YES$ MOV #SHO5A,(R5)+ ;; NO, SAY OFFLINE BR 50$ ;; JOIN COMMON CODE-40$: MOV #SHO5B,(R5)+ ;; INSERT A NULL STRINGB)50$: RETURN ;; RETURN FROM SYSTEM STATE660$: MOV #IOCBUF,14(R5) ; POINT TO THE IO COUNT BUFFER' CMP R3,LASTDV ; THIS ONE SAME AS LAST?  BNE 65$ ; IF NE - NO/ MOV #SHO5,R1 ; INPUT TO $EDMSG (NO EXTRA L.F.)E! BR 70$ ; JOIN COMMON CODE BELOW.665$: MOV #SHO5L,R1 ; INPUT TO $EDMSG (WITH EXTRA L.F.)170$: MOV #OUTFIL, R2 ; INPUT ARG BUFFER FOR EDMSG$- MOV R3,LASTDV ; UPDATE LAST DEVICE INDICATORR> MOV #EDTOUT, R0 ; OUTPUT BUFFER FOR EDMSG INPUT ARGS TO EDMSG* CALL WRITIT ; FORMAT AND OUTPUT THE LI00 %TADATADATADATADATADATADATADATADATANE80$:, DEC DEVS ; DECR. NUMBER OF DEV. TO PROCESS BNE 10$ ; LOOP IF WE HAVE MORE- CLOSE$ #USRFDB ;CLOSE THE USER OUTPUT FILET* MOV #IO.DET, ATDT+Q.IOFN ; SET TO DETACH  DIR$ #ATDT ; DETACH TERMINAL RETURN ; BACK TO ELIC .PAGE+ .SBTTL ROUTINE TO FORMAT AND OUTPUT A LINEH;T@; THIS ROUTINE CALLS $EDMSG AND THEN OUTPUTS THE FORMATTED LINE.;R2; INPUTS: R0 - POINTS THE THE $EDMSG OUTPUT BUFFER*; R1 - POINTS TO THE $EDMSG INPUT STRING-; R2 - POINTS TO THE $EDMSG ARGUMENT BUFFER ;E ; DESTROYS R3V;;WRITIT:M, MOV R0,R3 ; SAVE THE OUTPUT BUFFER ADDRESS CALL $EDMSG ; FORMAT THE LINEO0 BIT #FILOUT,FLAG1 ;USER OUTPUT FILE SPECIFIED?% BNE FILE ;YES. OUTPUT TO THE FILEC= QIOW$S #IO.WVB,#TILUN,#1,,,, ; OUTPUT TO TERMINALO RETURN ;AND GO BACKH2FILE: PUT$ #USRFDB,R3,R1 ;OUTPUT TO THE USER FILE RETURN ; RETURN TO CALLER .PAGE .SBTTL PROCESS A 'SHOW ALL';FB; GO THROUGH ALL UCB'S ON THIS DCB. NOTE THAT THIS CODE MAKES THEB; ASSUMPTION THAT THE SET OF MASS STORAGE DEVICES INCLUDES THE SETB; OF ALL ERROR LOGGING DEVICES. IT ALSO MAKES THE ASSUMPTION THATD; IF ANY UCB'S ON A DCB REPRESENT MASS STORAGE DEVICES, THEY ALL DO.A; THEREFORE IF WE ENCOUNTER A UCB REPRESENTING A NON-MASS STORAGE;B; DEVICE, WE CAN SKIP THE REMAINDER OF THIS DCB, AND THAT IF A UCBB; REPRESENTING A NON-MASS STORAGE DEVICE IS FOUND, IT IS THE FIRST<; UCB ON THE DCB (BECAUSE IT IS THE FIRST ONE WE ENCOUNTER).;SSHOALL:T% MOV #OUTDEV ,R1 ; GET SCRATCH BUFFERN- CLR (R1)+ ; RESERVE A WORD FOR DEVICE COUNTT# CALL $SWSTK, 50$ ; GO TO SYS STATES' MOV $DEVHD, R2 ;; POINT TO DEVICE LISTF10$:( MOV D.UCB(R2), R5 ;; GET FIRST UCB ADDR* MOVB D.UNIT+1(R2), R4 ;; HIGHEST UNIT NO.# MOVB D.UNIT(R2), R3 ;; LOWEST UNITG! SUB R3, R4 ;; SUB LOW FROM HIGHN! INCB R4 ;; ACCOUNT FOR ONE MORE. BIT #DV.MSD, U.CW1(R5) ;; IS IT MASS STORAGE?$ BEQ 40$ ;; LINK TO NEXT DCB IF NOT$ MOVB D.UNIT(R2), R0 ;; LOW UNIT NO.20$:>; BEGIN A LOOP TO FILL IN NAME,UNIT NO. : COUNTS AND LIMITS; # MOV D.NAM(R2), (R1)+;; DEVICE NAMEL MOVB R0, (R1)+ ;; UNIT NUMBER" CLRB (R1)+ ;; ROUND TO NEXT WORD* INC OUTDEV ;; INCREMENT THE DEVICE COUNT# DECB R4 ;; DEC TOTAL NO. OF UNITS  BEQ 40$ ;; BR IF NO MORE! INCB R0 ;; INC CURRENT UNIT NO., BR 20$ ;; AND LOOP;N"; DONE WITH THIS DCB, GET NEXT DCB;B40$: MOV (R2), R2 ;; LINKT BNE 10$ ;; BR IF MORE DCB'SN850$: RETURN ;; RETURN FROM SYSTEM STATE AND SUBROUTINE .END BEGIN A LOOP TO FILL IN NAME,UNIT NO. : COUNTS AND LIMITS5 .TITLE ERRUCB - SEARCH FOR UCB MATCHING DEVICE NAME) .IDENT /V03.00/;R;R#; COPYRIGHT (C) 1981, 1985 BYE); DIGITAL EQUIPMENT CORPORATION, MAYNARD (; MASSACHUSSETTS. ALL RIGHTS RESERVED.;F5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY;5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THEC5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERR5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE.5; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TOB5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.;15; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T;R; MODULE: ERRUCB.MAC;N; 8; VERSION: V03.00 INITIAL RELEASE OF RSX-11M-PLUS V3.0; MICRO/RSX V3.0; ; AUTHOR: S. ADAMS;O ; DATE: '81 ;E; ; PREVIOUSLY MODIFIED BY: ;F ; S. ADAMST; ; MODIFIED BY:;C; J. MELVIN 24-JUN-83 7; JM002 ALLOW USER TO SELECT WHICH PACKETS TO LOGY;G; J. MELVIN 18-MAY-83 :; JM003 PROCESS ERRORS.LOG, ERRORS.ACC FOR MICRO RSX; ; J. MELVIN 06-APR-845; JM0030 ALLOW MU AS VALID ERROR LOG DEVICE TYPE.;N; B. S. MCCARTHY 24-SEP-84C7; BM318 MOVE GETFID/PUTFID AND ASSOCIATED DATA T00%S"OP,; A PLACE WHERE THEY'RE MAPPED IN APR5."; (ERRRSB.MAC AND ERRRDT.MAC);; INPUT: R2 DEV MNEMONIC; R1 DEV UNIT NO.1; ENTRY POINT GETUCB FOLLOWS THROUGH REDIRECTION +; AND UPDATES R1 AND R2 -- GETUCD DOES NOTP;E.; OUTPUT: R0 CONTAINS UCB OR ZERO IF NOT FOUND6; CARRY SET IF DEVICE WAS NOT AN ERROR LOGGING DEVICE; R5, R4 ,R3 SAVED;4 .MCALL ALUN$S,GLUN$SU .MCALL EPKDF$- EPKDF$ ;DEFINE ERRLOG FEATURE MASK OFFSETS8*GLNBUF: .BLKW 6 ; BUFFER FOR GET LUN INFO .IF DF R$$MPL1$ERLOF==140000 ; OFFSET TO LOGFILE LENGTH BYTE,  ; FOLLOWED BY NAME4$ERBAF==140043 ; OFSET TO BACKUP FILE LENGTH BYTE, ; FOLLOWED BY NAME$$ERFID==140106 ; OFFSET TO FILE ID;T7$FILTR==140136 ;LOG PACKET FILTER MASK (USER DEFINED)N;CE; THE FOLLOWING IS WHAT IS BEING DESCRIBED BUT CANNOT BE DONE BECAUSE 5; THE FSL VERSION CANNOT BE BUILT BY THE TASK BUILDERU;.;.ASECTD ;.=140000 ';$ERLOF::.BYTE 0 ;LOG FILE NAME LENGTH; .BLKB 34. ;LOG FILE NAME .;$ERBAF::.BYTE 0 ;BACKUP LOG FILE NAME LENGTH"; .BLKB 34. ;BACKUP LOG FILE NAME; .EVENW+;$ERFID::.BLKW 1 ;DEVICE NAME FOR LOG FILEP); .BLKB 2 ;UNIT NUMBER AND RESERVED BYTE; .BLKW 3 ;FILE ID OF LOG FILE ;%;$LGFID: .BLKW 3 ;FID FOR ERRORS.LOG ;K%;$ACFID: .BLKW 3 ;FID FOR ERRORS.ACCS;A1;$FILTR: .BLKW 1 ;USER SELECT PACKET FILTER MASK ;.PSECTE .ENDCGETUCB::3 ALUN$S #6, R2, R1 ; ASSIGN LUN TO THE GIVEN DEVICER BCC 5$ ; BR IF DEVICE IS THERE( CLC ; IF DEV. NOT FOUND, CARRY IS CLR' CLR R0 ; SO IS THE OUTPUT UCB ADDRESS  RETURN ; EXIT SUBROUTINEA5$: / GLUN$S #6, #GLNBUF ; GET INFORMATION ON DEVICEL' MOV GLNBUF, R2 ; UPDATE THE ASCII NAMEB CLR R1 ; AND UNIT NUMBER BISB GLNBUF+2, R1 ; ...GETUCD:: MOV R4, -(SP) ; SAVE R4 CLR R4 ; ASSUME NOT FIND UCB CALL $SWSTK, 40$ ; SYSTEM STATE .IF DF R$$MPLT.IFF ; FOR M SYSTEMS:& MOV $DEVHD, R5 ;; ADDR OF DEVICE LIST)10$: CMP R2, D.NAM(R5) ;; MATCH ON NAME?F BEQ 20$ ;; IF YES - BR15$: MOV (R5), R5 ;; NEXT DCBR$ BNE 10$ ;; LOOP IF NOT END OF LIST" BR 30$ ;; IF END OF LIST, RETURN; ; NOW MATCH UNIT NO.;E20$:7 MOVB D.UNIT+1(R5), R3 ;; GET HIGHEST UNIT NO. FROM DCBM9 BIC #177400, R3 ;; COMPENSATE FOR POSSIBLE BIT EXTENSION( SUB R1, R3 ;; SUB OURS FROM THE HIGHEST5 BMI 15$ ;; BR TO NEXT DCB IF OURS .GT. THAN HIGHESTA( MOVB D.UNIT(R5), R3 ;; GET LOW UNIT NO.9 BIC #177400, R3 ;; COMPENSATE FOR POSSIBLE BIT EXTENSIONN! SUB R3, R1 ;; SUB. LOW FROM OURS$ BMI 15$ ;; MI - SKIP THIS ONER;;; UNIT NO. OK- GET UCB( MOV D.UCBL(R5) ,R0 ;; GET LENGTH OF UCB8 CALL $MUL ;; MUL LEN TIMES DIFF OF OUR UNIT AND LOWEST& MOV R1,R0 ;; MOVE RESULT OF MULTIPLY& ADD D.UCB(R5), R0 ;; POINT TO OUR UCB.IFT ;; FOR M-PLUS: MOV R2, R0 ;; GET DEV NAMEB1 CALL $CVDVN ;; CALL CONVERT DEVICE NAME IN EXEC BCS 30$ ;; BR IF UCB NOT FOUND MOV R2, R0 ;; MOVE UCB ADDR.IFTF ;; M OR M-PLUS ' MOV U.SCB(R0),R5 ;; POINT TO UCB'S SCBS# MOV @$HEADR, R4 ;; GET TASK HEADERI .IFT 1 BIT #S2.LOG, S.ST2(R5) ;; ERROR LOGGING ENABLED?U .IFF ;; FOR RSX11M2 BITB #SP.LOG, S.PRI(R5) ;; ERROR LOGGING ENABLED? .ENDC ; R$$MPL, BNE 25$ ;; BR IF YES' INCB 6(R4) ;; IF NO, SEC IN USER MODEU1 BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT ENABLED?N BNE 27$ ;YES.N25$:1 BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT ENABLED?F BEQ 26$ ;NO.+ BITB #US.OFL,U.ST2(R0) ;WAS DEVICE ONLINE?R BEQ 27$ ;YES. SO RETURN IT P+ INCB 6(R4) ;SET CARRY TO SHOW ITS OFFLINEA26$: ;REFERENCE LABEL(27$: MOV R0,(R4) ;UCB ADDR TO USER R4"30$: RETURN ;; BACK TO USER MODE240$: MOV R4, R0 ; MOVE UCB ADDRESS TO OUTPUT REGIS MOV (SP)+, R4 ; RESTORE R42 RETURN ; BACK FROM SUBROUTINE .PAGE! .MCALL FCSMC$,OFID$M,PUT$,GTIM$CS .MCALL GET$R,PUT$RT FCSMC$N$$LGFID==140122 ;FOR ERRORS.LOG FID$$ACFID==140130 ;FOR ERRORS.ACC FID#LGFID$==0 ;OFFSET WITHIN NEW AREA0#ACFID$==6 ;OFFSET WITHIN NEW AREAS%ZEFLAG==4 ;/ZE INDICATOR (BIT MASK)R&UPFLAG==10 ;/UP INDICATOR (BIT MASK)LUNLOG == 10. ;ERRORS.LOG LUNBACCLUN == 1100%JTADATADATADATADATADATADATADATADATA. ;ERRORS.ACC LUN;USRLUN == 12. ;USER FILE LUNM;============================================================================AL;THE FOLLOWING TABLE DEFINES WHICH DEVICES ARE POSSIBLE IN THE MICRO SYSTEM.;$@;THE FOLLOWING LINES ARE ORDER DEPENDANT. BEWARE CHANGING THEM.M;============================================================================F2PNTR = 0 ;MUST BE DEFINED BEFORE USING 'DEFINE'DEVPNT::E;;; DEFINE <,,,,,> ;MICRO RSX VERJ DEFINE <,,,,,,,,>NOPNT:: .BYTE 0,0,100.,0 .EVENUSRFDB:: FDBDF$= FDAT$A R.VAR,FD.CRF FDOP$A USRLUN,,,,FA.DLK!BLOCK:: ;BUFFER FOR ERRORS.ACCSARGBLK::.BLKW 26.L8OUTB1:: .BLKW 100. ;OUTPUT BUFFER FOR EDMSG (OVERLAPS)8OUTB2:: .BLKW 100. ;OUTPUT BUFFER FOR EDMSG (OVERLAPS)*EXTRA: .BLKW 30. ;PAD OUT TO A FULL BLOCK4BLOCK2::.BLKW 256. ;SPACE FOR HISTORICAL DATA BLOCK1BUFSIZ==<.-BLOCK>/2 ;TOTAL BUFFER LENGTH (WORDS)S'ACCNDX::.WORD 0 ;INDEX FOR ERRORS.ACCDF;=====================================================================$;THE ABOVE LINES ARE ORDER DEPENDANTF;===================================================================== .PAGE' .SBTTL OPNACC OPEN THE ERRORS.ACC FILEUF;=====================================================================E;THIS ROUTINE OPENS THE ERRORS.ACC FILE FOR USE. THE FID OF THE FILEBE;IS PLACED IN SECONDARY POOL IN ORDER TO FACILITATE OPENING IT AGAIN. F;=====================================================================0OPNACC::MOV #ACFID$,R4 ;USE ERRORS.ACC FID AREA+ CALL GETFID ;MOVE FID INFO FROM 2ND POOLP) BCS 10$ ;NO INFO. MUST OPEN THE FILE.=* OFID$M #ACCFDB ;OPEN BY FID IF POSSIBLE, BCC O.AXIT ;THAT WAS EASY. FILE IS OPEN.>10$: OPEN$M #ACCFDB,#ACCLUN,#$ACCNM ;TRY TO OPEN BY FILE NAME.+ BCC O.ASAV ;THAT ONE WORKED. SAVE INFO.OA OPEN$W #ACCFDB,#ACCLUN,#$ACCNM ;MUST RESORT TO CREATING NEW ONE.  BCS O.AXIT ;THAT WORKED.# MOV #BLOCK,R4 ;GET BUFFER ADDRESS=3 MOV #BUFSIZ,-(SP) ;BUFF LEN TO TEMP CELL ON STACKF+12$: CLR (R4)+ ;CLEAR BUFFER CELL TO ZEROD& DEC (SP) ;SHOW ONCE LESS WORD TO DO BGT 12$ ;CLEAR ENTIRE BUFFERE) TST (SP)+ ;CLEAR COUNT AREA FROM STACKB8 GTIM$C BLOCK+AL.ZER ;PUT CURRENT TIME/DATE FOR ZEROING9 GTIM$C BLOCK+AL.UPD ;PUT CURRENT TIME/DATE FOR UPDATINGC= PUT$R #ACCFDB,#BLOCK,#512.,#1,#0 ;WRITE OUT SHORT TERM BLOCKU0 MOV #<*2>,R4 ;NUMBER OF WORDS TO MOVE@15$: MOV BLOCK(R4),BLOCK2(R4) ;DATE FROM SHORT TERM TO LONG TERM# SUB #2,R4 ;ONE LESS WORD TO MOVEE$ BGE 15$ ;MOVE ENTIRE DATE SECTION< PUT$R #ACCFDB,#BLOCK2,#512.,#2,#0;WRITE OUT LONG TERM BLOCK) MOV #ACFID$,R4 ;USE ERRORS.ACC FID AREA+, CALL PUTFID ;MOVE INFO INTO 2ND POOL AREA- CLOSE$ #ACCFDB ;CLOSE THE FILE TO DO PURGEG1 BCS O.AXIT ;TO PREVENT POSSIBLE LOOP CONDITIONT* JMP OPNACC ;AND GO OPEN THE FILE BY FID0O.ASAV: MOV #ACFID$,R4 ;USE ERRORS.ACC FID AREA, CALL PUTFID ;MOVE INFO INTO 2ND POOL AREA CLC ;INDICATE NORMAL EXIT !O.AXIT: RETURN ;WHENCE WE CAMES .ENDMOVEE$ BGE 15$ ;MOVE ENTIRE DATE SECTION< PUT$R #ACCFDB,#BLOCK2,#512.,#2,#0;WRITE OUT LONG TERM BLOCK) MOV #ACFID$,R4 ;USE ERRORS.ACC FID AREA+, CALL PUTFID ;MOVE INFO INTO 2ND POOL AREA- CLOSE$ #ACCFDB ;CLOSE THE FILE TO DO PURGEG1 BCS O.AXIT ;TO PREVENT POSSIBLE LOOP CONDITIONT* JMP OPNACC ;AND GO OPEN THE FILE BY FID0O.ASAV: MOV #ACFID$,R4 ;USE ERRORS.ACC FID AREA, CALL PUTFID ;MOVE INFO INTO 2ND POOL AREA CLC ;INDICATE NORMAL EXIT !O.AXIT: RE3 .TITLE ERRLOG - MAIN MODULE OF ERROR LOGGING TASKO .IDENT /V04.01/;N;P#; COPYRIGHT (C) 1980,1985 BYE); DIGITAL EQUIPMENT CORPORATION, MAYNARD (; MASSACHUSSETTS. ALL RIGHTS RESERVED.;F5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY 5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THEO5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE.5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERU5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE 5; MADE AVAILABLE TO 00JS"ANY OTHER PERSON. NO TITLE TO 5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.;85; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T;U; MODULE: ERRLOG.MAC;N7; VERSION: V04.01 INITIAL RELEASE OF RSX-11M-PLUS V3.0 ; MICRO/RSX V3.0;N5; V04.01 CORRECT PROBLEM WITH VOLUME LABEL=12 CHARR0; CORRECTLY HANDLE UNKNOWN INTERRUPTS/MEM PAR; ; AUTHOR: S. ADAMS;N ; DATE: '80O;E; MODIFIED BY:; ;S; PREVIOUSLY MODIFIED BY: ;D ; C. PUTNAM ; S. ADAMSN;; MODIFIED BY:;M; J. MELVIN 16-MAY-83 RB; JM001 CONDITIONALIZE CONSOLE MESSAGE INHIBIT FOR MICRO RSX; ; J. MELVIN 17-MAY-83 <; JM002 LOG SELECTIVE PACKETS TO LOG.ERR FOR MICRO RSX;R; J. MELVIN 20-MAY-83 .:; JM003 PROCESS ERRORS.LOG, ERRORS.ACC FOR MICRO RSX;E; J. MELVIN 25-JUL-83 AD; JM012 INSURE HARD/SOFT LIMIT MESSAGE IS OUTPUT TO ERRORS.LOG;A; S. ADAMS 10-SEP-83 9; SA122 FIX LIMITING TIMING BUG BY CHECKING NEW BIT ; ; J. MELVIN 27-APR-840; JM0030 ALLOW MU AS VALID ERROR LOG DEVICE; ; J. MELVIN 03-JAN-85;; JJM104 FIX PROBLEM WITH VOLUME NAMES = 12 CHARACTERS-;; J. MELVIN 03-JAN-85/; JJM105 CORRECT UNK INT / MEM PAR PROBLEM ;V; G. MARIGOWDA 03-JUL-85>; GM001,GM002 PLACE THE VECTOR # IN THE BLOCK AND MULTIPLY4; INSTEAD OF MULTIPLYING THE VALUE IN THE PACKET;II;************************************************************************I ;* *E;* NOTE WELL: THIS MODULE HAS CODE IN IT THAT REMAPS APR6 ON M-PLUS *U/;* AND THEREFORE MUST EXECUTE OUT OF APR5. *A ;* *I;************************************************************************A;54; THE ERROR LOGGING TASK DEQUEUES ERROR PACKETS FROME; POOL. MOST OF THESE ARE INFORMATIONAL, DESCRIBING DEVICE CONDITIONS I; SOME ARE COMMAND PACKETS. THE ERROR LOGGER WILL ALWAYS ACCEPT A COMMANDTI; PACKET. THE ERROR LOGGER WILL ACCEPT A NONCOMMAND PACK ONLY WHEN IT IS*?; PERFORMING LOGGING OR LIMITING. THERE ARE FLAGS IN SYSCM THAT E; ARE RESPECTIVELY SET OR RESET BY ERRLOG RE IT'S OPERATIONAL STATUS: $; LOG, LIMIT, DATA, AND INITIALIZED.G; ERRLOG EITHER SETS UP THE DEFAULT LOG FILE NAME OR SETS UP A FILENAMEOH; RECEIVED IN THE LOG PACK FROM THE INTERFACE TASK. IT OPENS THE FILE, E; SAVES THE FILE ID IN SYSCM. THE BACKUP FILE NAME IS SAVED IN SYSCMRE; WHEN AN IRRECOVERABLE ERROR OCCURS TO THE LOG FILE, THE BACKUP FILEI=; IS OPENED AND BECOMES THE LOG FILE. THE CONSOLE IS WARNEDIG; THAT THE BACKUP FILE IS NOW IN USE. THERE IS NO LONGER A BACKUP FILE E; UNTIL ONE IS SPECIFIED TO THE INTERFACE TASK OR THE ERROR LOGGER ISNI; RESTARTED. THE ABSENCE OF THE BACKUP FILE IS INDICATED BY A ZERO LENGTHF; IN ITS POSTITION ON SYSCM.;A"; SUBROUTINES AND THEIR FUNCTIONS:;H; $ERLOG - ENTRY POINT%; LOG LOGS THE PACKET TO THE LOG FILES>; LIM CHECKS TO SEE IF THE GIVEN PACKET INDICATES THAT LIMITS7; HAVE BEEN EXCEEDED OR ERROR AND QIO COUNTS RESET AND 9; IF SO, PRINTS WARNING - CALLS EDQIO TO WARN CO AND TI.OA; OPNCUR - OPEN CURRENT LOG FILE BY ID FOR APPEND. IF THIS FAILS,I; TRIES BY NAME#; $CONER - TYPES ERROR MSG'S AT CO:T&; $GTPAC - POINTS AT DESIRED SUBPACKET8; $RETRN - SENDS EXIT STATUS TO CALLING TASK AND RETURNS!; GETUCB - FINDS DESIRED UCB ADDRI3; ALSO SEE MODULE ERRPRC FOR ROUTINES TO PROCESS E#; INDIVIDUAL ERROR MESSAGE BLOCKSS;I;H ; DEFINITIONSI;C4MAXLAB = 12. ;MAXIMUM BYTE LENGTH OF VOLUME LABEL4 LOGLUN = = 4 ; LOGICAL UNIT NUMBER FOR THE LOG FILE COLUN = 3 ; LUN FOR CONSOLEP& TILUN = = 2 ; LUN FOR TERMINAL OUTPUT& TMPLUN = = 1 ; LUN FOR TEMPORARY FILE EFN == 1 ; EVENT FLAG0 $MAXLN == 510. ; MAXIMUM LENGTH OF EMB IN BYTES( F.OVR == 1 ; BIT DEF FOR OVERRIDE NOLOG. F.SYS == 2 ; BIT DEF FOR USE SYSTEM STATE IN 00JTADATADATADATADATADATADATADATADATA ; THE MOVING OF FILENAMESR0 F.FST == 4 ; SET IF EMB IS THE FIRST AFTER INIT;M;A ; MACRO CALLS;* .MCALL SDAT$S,EPKDF$,UCBDF$,SCBDF$,TCBDF$* .MCALL FSRSZ$,FINIT$,FDBDF$,FDAT$R,FDOP$R; .MCALL GET$S,PUT$S,DIR$,CLOSE$,ALUN$S,OFID$A,OPEN$A,OPEN$W  .MCALL CSRQ$,QIOW$2 .MCALL FCSMC$,QIOW$SP .MCALL GET$R,PUT$RU FCSMC$R;I/ SCBDF$ ; DEFINE STATUS CONTROL BLOCK OFFSETSU- UCBDF$ ; DEFINE UNIT CONTROL BLOCK OFFSETS - TCBDF$ ; DEFINE TASK CONTROL BLOCK OFFSETSS' EPKDF$ ; DEFINE ERROR PACKET OFFSETSI' FSRSZ$ 2 ; UP TO 2 FILES OPEN AT ONCEI; ; FDB FOR LOG FILE;A $FDB:: FDBDF$;C ; OUTPUT QIO;,-ODPB: QIOW$ IO.WBT,TILUN,EFN,,,,<$COBUF,0,40>D;F.CSRQ: CSRQ$ ERRLOG ; CANCEL OUTSTANDING REQ'S .EVENSAVER4: .WORD 0 ;WORK CELL#FILTER: .WORD 0 ;USER FILTER MASK.MASKS:: .WORD 000001 ;TYPE 1 .WORD 000002 ;TYPE 2E .WORD 000004 ;TYPE 3S .WORD 000010 ;TYPE 4U .WORD 000020 ;TYPE 5  .WORD 000040 ;TYPE 6  .WORD 000100 ;TYPE 7E .WORD 000200 ;TYPE 8C .WORD 000400 ;TYPE 9  .WORD 001000 ;TYPE 10; ; ASCII STRINGS;<; LOG FILE NAME (POINTS TO THE DEFAULT.. CAN BE OVER RIDDEN);N$FILNM:: .WORD LENSY ; LENGTH OF DEVICE .WORD DEFSY ; SY0: .WORD LENUFD ; LENGTH OF UFD .WORD DEFUFD ; [1,6] .WORD LENNAM ; LENGTH OF NAMEK .WORD DEFNAM ; LOG.ERR;. .NLIST BEX DEFSY:: .ASCII /LB0:/ LENSY == . - DEFSYDEFUFD:: .ASCII /[1,6]/2LENUFD == . - DEFUFDDEFNAM::.ASCII /LOG.ERR/LENNAM == . - DEFNAM .EVEN4$FLAG:: .WORD 0 ; BIT0 - CLR=NO OVERRIDE OF /NOLOG( ; IF SET, LOG THE EMB EVEN IF NOT IN# ; LOG MODE (NOLOG WAS LAST EMB)C* ; BIT 1 CLR = DON'T NEED SYS STATE FOR& ; GET FILE OPERATION ..SET, WE DO* ; BIT2 SET IF EMB IS FIRST AFTER INIT.(EMBLEN: .WORD 0 ; LENGTH OF CURRENT EMB.$EMB:: .BLKB $MAXLN ; BUFFER FOR CURRENT EMB.;$TMPBF::.BLKB $MAXLN ; USED BY SWI AND APP TO COLLECT DATA 'TSKNM:: .BLKW 2 ; RAD50 FROM TASK SUBPA.TSKDN:: .WORD 0 ; DEVICE NAME OF ISSUING TASK*TSKUN:: .BYTE 0 ; UNIT NO OF ABOVE DEVICE .BYTE 0 ; FILLER(TSKFL:: .BYTE 0 ; FLAGS OF ISSUING TASK .BYTE 0 ; FILLER#$BUFF:: .BLKW 16. ; SCRATCH SPACE EBACFIL: .WORD LENSY .WORD DEFSY ; SY0: .WORD LENUFD  .WORD DEFUFD ; [1,6] .WORD LENBACW .WORD DEFBAC ; BACKUP.ERRBDEFBAC: .ASCII /BACKUP.ERR/ELENBAC == . - DEFBAC .ENABL LC+EXCEED: .ASCII /** WARNING: Device %2A%O: / $ .ASCIZ /reached %4A limit (%M.) **/ .EVEN%EDTOUT::.BLKW 60. ; BUFFER FOR EDMSG N/EDTIN: .BLKW 4 ; BUFFER FOR INPUT ARGS TO EDMSGI2DEVICE: .WORD 0 ; BUFFER FOR BROADCAST DEVICE NAMEHARD: .ASCII /Hard/ESOFT: .ASCII /Soft/:6RESMSG: .ASCIZ /Error and QIO counts reset for %2A%O:/;.; ERROR MESSAGES;.,UCBER:: .ASCIZ /%2A%O is not in the system./9ELDER:: .ASCII /%2A%O is not an error logging device or /K .ASCIZ /is offline./ &DIDER: .ASCIZ /No Device_ID Subpacket/$ASLER: .ASCIZ /Failed to assign lun/BLOGER: .ASCIZ /Log file error - logging continuing on backup file/8BACER: .ASCIZ /Backup file error - logging discontinued/)EMBER: .ASCIZ /Error Log packet too long/C&CLSER: .ASCIZ /Error closing log file/!CORER: .ASCIZ /Insufficient core/nERRPRE: .ASCIZ /ERRLOG -- /ERRNUL: .ASCIZ //SERREDM: .ASCIZ /%I%I/2 .EVENERRBUF: .WORD ERRPRE .WORD 0*$FILOP:: .WORD 0 ; IF CLEAR, NO FILE OPEN7$XSTAT::.WORD EX$SUC ; INITIALIZE TO EXIT SUCCESSFULLYp .PAGE .SBTTL MAIN LINE CODE;g ; FIRST, INITIALIZE IF NECESSARY; $ERLOG::. DIR$ #CSRQ ; CANCEL ANY OUTSTANDING REQUESTS" FINIT$ ; INITIALIZE FILE SYSTEM, BIC #F.FST, $FLAG ; ASSUME NOT FIRST PACKET CALL $SWSTK, 5$ ; SYS STATE# TST $ERRPT ;; ARE WE INITIALIZED?  BNE 3$ ;; BR IF YESZ .IF DF R$$MPL ;; M-PLUS CONDIT.6.IFT ;; FOR M-PLUS ALLOCATE 2ND POOL FOR FILE NAMES* CLR $ERRX ;; ASSUME COULD NOT GET BLOCKS MOV #2, R1 ;; WE NEED 2 BLOCKS CALL $ALSEC ;; GO FOR ITS BCS 1$ ;; BR IF WE FAILEDN' MOV R0, $ERRX ;; SAVE POINTER IN SYSCMC;A.IFTF! CLR $ERRSQ ;; CLR ERROR SEQ NO. !00JS" CLR $ENTSQ ;; CLR ENTRY SEQ NO.N, BISB #ES.INI,$ERFLA ;; SET THIS SO WE WON'T ;; ...CLEAR $ERRPT ON EXIT; >; MOVE IN TCB ADDRESS TO INDICATE ERROR LOGGER IS INITIALIZED.;R2 MOV $TKTCB, $ERRPT ;; PUT TASK'S TCB INTO POINTER.1$: MOV @$HEADR, R3 ;; SET CARRY IN USER STATE INCB 6(R3) ;; ... 3$: RETURN ;; TO USER STATE 5$: / BCC ERLOG ; BR IF WE WERE ALREADY INITIALIZEDB.IFT ; FOR M-PLUS ONLY ;VE; IF CARRY SET AND POINTER 0, NOT ENOUGH POOL SO PRINT MESSAGE & EXITRB; NOTE:: FOR THE CODE TO GET PAST THIS POINT, ERRX WILL ALWAYS BE D; NON-ZERO. HENCE, WHEN MAPPING TO IT, MINIMAL CHECKING IS DONE FOR; A NON-ZERO VALUE.D;T TST $ERRX ; IS POINTER 0?. BNE 10$ ; BR IF OK MOV #CORER, R3 ; GET MSG ADDR.R CALL $CONER ; AND DISPLAYC MOV #EX$ERR, R0 ; FATAL ERROR JMP $EXST ;E10$:.IFTFU; F; MOVE BACKUP FILE NAME TO SYSCM AND SET FLAG TO MARK THE EMB AS FIRST;O* MOV #BACFIL, R4 ; GET DEFAULT NAME BUFFER MOV #$ERBAF, R5 ; SYSCM ADDR.3 BIS #F.SYS, $FLAG ; TELL SUBR WE NEED SYSTEM STATES CALL $GTFL2 ; MOVE ITB. BIS #F.FST,$FLAG ; FIRST EMB AFTER INITIALIZEERLOG:# MOV #EX$SUC,$XSTAT ; ASSUME SUCESSD. MOV #$MAXLN, R4 ; MAX LENGTH OF EMB FOR QERMV& MOV #$EMB, R5 ; BUFFER ADDR FOR QERMV* CALL $SWSTK, 15$ ; SWITCH TO SYSTEM STATE MOV KISAR6, -(SP) ; SAVE APR6) MOV KISAR5, KISAR6 ; SET UP APR5 IN APR6N ADD #20000, R5S* CALL $QERMV ;; TRY TO GET EMB FROM QUEUE! MOV (SP)+, KISAR6 ; RESTORE APR6R MOV R1, EMBLEN ;; SAVE EMB SIZE BCC 10$ ;; BR IF EMB TST R1 ;; DID WE GET PACKET? BNE 3$ ;; BR IF YES( TST $FILOP ;; NO PACKET. IS FILE OPEN? BNE 3$ ;; BR IF YESS6 BITB #ES.INI, $ERFLA ;; DID SOMEONE SHUT DOWN ERRLOG? BNE 2$ ;; BR IF NO.IFT$ MOV $ERRX, R0 ;; SET UP TO DEALLOC. BEQ 1$ ;; BR IF NO MOV #2, R1 ;; NO. OF BLOCKS" CALL $DESEC ;; DEALLOC. 2ND POOL1$:E.ENDCR! CLR $ERRPT ;; INDICATE SHUTDOWN %2$: MOV $TKTCB, R5 ;; SET UP FOR EXITM# CALLR $DREXT ;; SYSTEM STATE EXITV3$:E MOV @$HEADR, R3 ;; SET USER INCB 6(R3) ;; CARRYR10$: RETURN ;; BACK TO USER STATER15$: BCC 20$ ; BR IF GOT EMBE& TST EMBLEN ; HERE, WE DIDN'T GET ONE BEQ 17$ ; BR IF NO PACKETD2 MOV #EMBER, R3 ; IF NONZERO, THE EMB WAS TOO LONG,16$: MOV #EX$ERR, $XSTAT ; ERROR EXIT STATUS$ CALL $CONER ; ERROR MSG TO CONSOLE" JMP ERLOG ; LOOP FOR ANOTHER EMB; <; THERE WASN'T A PACKET BUT WE HAD TO LEAVE SYS.STATE BEFORE@; EXITING TO CLOSE THE FILE. WHILE CLOSING FILE, WE MAY HAVE HAD); A PACKET QUEUED, SO WE MUST CHECK AGAINI; 17$: CLR $FILOP ; FILE CLOSED CLOSE$ #$FDB ; CLOSE IT:( BCC ERLOG ; AND TRY FOR ANOTHER PACKET$ MOV #CLSER, R3 ; IF FAILED, MESSAGE' MOV #EX$ERR, $XSTAT ; SET ERROR STATUSN CALL $CONER ; REPT TO CONSOLE CALL $CLSER ; OPEN BACKUP FILE JMP ERLOG ; NEXT PACKETO20$:!.IF DF R$$MPL ;; FOR M-PLUS ONLYA# CALL $SWSTK, 21$ ;; GOTO SYS STATEE- CALL $TICLR ;; IN CASE VT, CLEAR TI: TO CO:N MOV $TKTCB, R3L) MOV $COPT, T.UCB(R3) ;; SET TO TI OF CO:  RETURN ; TO USERM21$:.ENDCI;;/; WE HAVE AN EMB ( ERROR PACKET ) TO PROCESS..;K; IF IT'S A COMMAND EMB, JUMP TO THE APPROPRIATE ROUTINE (IN MODULE PRCEMB)I0; TO PROCESS IT. IF ERRLOG IS IN LOGGING MODE,L; LOG THE EMB. ALSO ,IF WE ARE LIMITING, CALL THE LIMIT ROUTINE (LIM) WHICHG; WILL SEE IF AN EMB FLAG IS SET TO SAY THIS ERROR BROKE A LIMIT OR THES4; COUNTS WERE RESET. IF SO, LIM WILL ISSUE WARNINGS.0; LOOP BACK TO ERLOG FOR THE NEXT EMB OR AN EXIT; ;C$ MOV #$EMB, R4 ; RESTORE EMB POINTER0 BIT #F.FST, $FLAG ; FIRST EMB AFTER INITIALIZE? BEQ 25$ ; BR IF NO8 CMPB #EH$CRS,E$HCTX(R4) ; PACKET FROM A CRASHED SYSTEM? BEQ 24$ ; IF SO, BRANCHI7 MOVB #EH$STA, E$HCTX(R4) ; SET CONTEXT CODE OF 1ST EMB .24$: BIC #F.FST, $FLAG ; CLEAR INITIALIZE FLAG25$:/ CMPB E$HTYC(R4),#E$CCMD ; IS IT A COMMAND EMB?T BNE 30$ ; BR IF NO;A( CALL $PRCMD ; IF YES, CALL PROCESS EMB;I;I;I; DO LOGGING FUNCTIONB; 30$:0 BIT #F.OVR, $FLAG ; SHOULD WE OVERRIDE LOG BIT?/ BNE 35$ ; BR IF YES (MEANS /NOLOG JUST GIVEN);* BIT #ES.LOG, 00JTADATADATADATADATADATADATADATADATA$ERFLA ; TEST LOGGING STATUS BEQ 40$ ; BR IF NOT LOGGING)35$:* BIC #F.OVR, $FLAG ; GOOD FOR ONLY ONE EMB CALL LOG ; LOG IF ALL RIGHTT;4 ; DO LIMITING ;E40$:' BIT #ES.LIM, $ERFLA ; ARE WE LIMITING?I BEQ 50$ ; BR IF NOT LIMITING" CALL LIM ; HANDLE LIMIT FUNCTION;B; CHECK FOR RESET;#50$: CALL RESCHK ; CHECK FOR RESETE# JMP ERLOG ; BACK TO THE BEGINNINGB .PAGESPCLOG:# V2 BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT ENABLED? BEQ 15$ ;NO. GET OUT CALL $SAVAL ;SAVE REGISTERS& MOV #$EMB,R4 ;BASE ADDRESS OF PACKET3 MOV E$HENC(R4),BADPKT ;MAKE SURE WE FIND SOMETHINGN+ MOV #VALPKT,R5 ;BASE ADDR OF VALID COMBOS4810$: CMP (R5)+,E$HENC(R4) ;CORRECT COMBINATION OF CODES? BNE 10$ ;NO. KEEP LOOKING.O% TST -(R5) ;BACK UP TO ACTUAL ENTRYU% SUB #VALPKT,R5 ;GET RELATIVE INDEX: MOV R5,R3 ;COPY TO WORK WITH CLC ;INSURE NO CARRY BIT SET ASR R3 ;MAKE IT A BYTE INDEXL- MOV R3,ACCNDX ;SAVE IT TO UPDATE ERRORS.ACCQ0 CMPB #NULL,FMTTAB(R3) ;OUTPUT ONLY THE MESSAGE? BNE 20$ ;BR IF NO.E. MOV MSGTAB(R5),R3 ;GET ADDRESS OF DESCRIPTOR& CALL ECRIT ;WRITE OUT TO ERRORS.LOG+15$: RETURN ;GO BACK WHERE WE CAME FROM.+220$: CMPB #VOLUME,FMTTAB(R3) ;VOLUME MOUNT MESSAGE BNE 21$ ;NO+ BIT #EL.MOU,$EFMSK ;LOG MOUNTS/DISMOUNTS?S BNE 22$ ;YES. BR 15$ ;RETURN:21$: CMPB #FMTDEV,FMTTAB(R3) ;OUTPUT DEVICE MNEMONIC ALSO? BNE 50$ ;BR IF NO.T122$: MOV #SM.DID,R0 ;DEV ACTIVITY PACKET DESIREDE CALL $GTPAC ;GO FIND IT+ BCC 25$ ;IT WAS THERE. R4 POINTS TO IT.;6 MOV #FILLER-E$ILDV,R4 ;USE A DUMMY ENTRY FOR MESSAGE.(25$: MOV R3,-(SP) ;SAVE THE FORMAT TYPE, MOV R4,-(SP) ;SAVE START OF PACKET ADDRESS2 MOV MSGTAB(R5),R3 ;GET ADDRESS OF MSG DESCRIPTOR* MOV #BLOCK,R2 ;ADDRESS OF ARGUMENT BLOCK( MOV (R3)+,(R2)+ ;PUT IN THE MSG LENGTH+ MOV R3,(R2)+ ;ADDRESS OF THE ASCII STRINGB* ADD #E$ILDV,R4 ;POINT TO DEVICE MNEMONIC MOV #2,(R2)+ ;MNEMONIC LENGTHR* MOV R4,(R2)+ ;ADDRESS OF DEVICE MNEMONIC( MOV (R4),ERRDEV ;SAVE IT FOR USE LATER" ADD #2,R4 ;POINT TO UNIT NUMBER1 MOVB (R4),(R2)+ ;MOVE IN THE ACTUAL UNIT NUMBERR2 MOVB (R4),ERRUNT ;SAVE UNIT NUMBER FOR LATER USE+ CLRB (R2)+ ;ONLY NEED A SINGLE BYTE HERE / MOV (SP)+,R4 ;GET THE SUBPACKET ADDRESS AGAIND) MOV (SP)+,R3 ;GET THE FORMAT TYPE AGAINP" MOV #1,(R2)+ ;DUMMY LABEL LENGTH0 MOV #LABEL,(R2)+ ;DUMMY (BLANK) LABEL (1 CHAR)5 CMPB #VOLUME,FMTTAB(R3) ;VOLUME NAME NEEDED AS WELL?T$ BNE 40$ ;NO. USE THE DUMMY LABEL+ ADD #E$IVOL,R4 ;POINT TO THE VOLUME LABELL/ MOV R4,-(R2) ;STORE IN THE LABEL ADDRESS AREAR* MOV R4,R1 ;GET THE ADDRESS OF THE LABEL- MOV #177777,-(R2) ;INITIALIZE LABEL LENGTH E235$: INC (R2) ;ONE MORE CHARACTER IN VOLUME NAME' CMP (R2),#MAXLAB ;MAXIMUM LABEL SIZE?G" BGE 40$ ;YES. LEAVE IT AT THAT.3 TSTB (R1)+ ;IS THIS THE END OF THE VOLUME LABEL?V BNE 35$ ;NO. KEEP TALLYING .40$: MOV #DEVFMT,R1 ;MSG WITH DEVICE MNEMONIC$ BR COMEDI ;JOIN COMMON EDMSG CODE450$: CMPB #VECTOR,FMTTAB(R3) ;VECTOR # WITH MESSAGE? BNE 15$ ;NO. JUST RETURNT% MOV #SM.DAT,R0 ;POINT TO DATA AREA ;& CALL $GTPAC ;AND GET THE SUB PACKET$ BCC 55$ ;ONE WAS FOUND SO USE IT.) MOV #FILLER,R4 ;USE A DUMMY SUB PACKET.M-55$: MOV #BLOCK,R2 ;ARGUMENT BLOCK FOR EDMSGG3 MOV MSGTAB(R5),R3 ;GET ADDR OF MESSAGE DESCRIPTORI' MOV (R3)+,(R2)+ ;STORE MESSAGE LENGTHE% MOV R3,(R2)+ ;STORE MESSAGE ADDRESSM) ADD #2,R4 ;POINT TO CELL WITH VECTOR/4B( MOV (R4),(R2) ;STORE THE VECTOR NUMBER ASL (R2) ;MULTIPLY BY 20 ASL (R2) ;AND BY 2 AGAIN TO GET REAL VECTOR #0 MOV #VECFMT,R1 ;USE MESSAGE WITH VECTOR FORMAT'COMEDI: MOV #OUTB1+2,R0 ;OUTPUT BUFFER; MOV #BLOCK,R2 ;ARGUMENT BLOCKI) CALL $EDMSG ;CREATE NEW MESSAGE STRINGV/ MOV R1,OUTB1 ;CREATE MESSAGE DESCRIPTOR (LEN)A1 MOV #OUTB1,R3 ;CREATE MESSAGE DESCRIPTOR (ADDR)3& CALL ECRIT ;WRITE OUT TO ERRORS.LOG;R;;THIS CODE DETERMINES IF THE PACKET RECEIVED SHOULD GO INTOH>;ERRORS.ACC. IF A DEVICE IS NOT RECOGNIZED, NO ENTRY IS MADE.;MNOMSG:3 CMP ACCNDX,#SINGLE ;SINGLE ACC00JS"UMULATOR TO UPDATE?#) BLT 3$ ;NO. USE MULTI ACCUMULATOR CODE 4 CMP ACCNDX,#NOPROC ;IS THERE REALLY AN ACCUMULATOR, BLE 7$ ;YES. USE SINGLE ACCUMULATOR CODE3$: ;REFERENCE LABEL. MOV ERRDEV,NOPNT ;INSURE THE DEVICE IS FOUND% MOV #DEVPNT,R4 ;ADDR OF DEVICE INFO )5$: CMP (R4)+,ERRDEV ;IS IT THIS DEVICE?T BNE 5$ ;BR IF NO.+ CMP R4,#NOPNT+2 ;WAS DEVICE REALLY FOUND?O% BEQ ACCX ;NO, SO IGNORE IT IN .ACC 7$: ;REFERENCE LABEL& MOV R4,SAVER4 ;SAVE AROUND OPEN CALL* CALL OPNACC ;OPEN ERRORS.ACC FOR UPDATE BCS ACCX ;UNABLE TO OPEN IT: GET$R #ACCFDB,#BLOCK,#512.,#1,#0;GET THE SHORT TERM BLOCK# MOV ACCNDX,R5 ;GET THE ERROR TYPEO% CMP R5,#NOPROC ;IS IT SPECIAL TYPE?E) BGE ACCW ;YES. IT DOES NOT GO IN .ACCM+ CMP R5,#SINGLE ;IS IT NON DEVICE SPECIFIC  BLT 10$ ;BR IF NO.I( SUB #SINGLE+1,R5 ;OFFSET IT FROM ZERO % ;WHICH HAS TO TAKE BLOCK REPLACEB" ;INTO ACCOUNT, HENCE THE '1'. ASL R5 ;MAKE IT A WORD OFFSET/ INC BLOCK+AL.MP(R5) ;AND UPDATE THAT LOCATION;* BR OUTACC ;AND WRITE THE BLOCK BACK OUT10$: .IF DF,R$$EIS/ MUL #MAX.DV*2,R5 ;DETERMINE ACCUMULATOR BLOCKO .IFF ;R$$EIS, MOV R5,R0 ;MULTIPLICAND MOV #MAX.DV*2,R1 ;MULTIPLIER CALL $MUL ;DO IT THE HARD WAY' MOV R0,R5 ;PUT RESULT WHERE EXPECTEDO .ENDC ;R$$EIS3 ADD #BLOCK+AL.UIO,R5 ;GET THE ACTUAL ADDRESS OF ITT% MOV SAVER4,R4 ;RESTORE THE REGISTER MOV (R4),-(SP) ;TEMP WORK CELL( BIC #177400,(SP) ;CLEAN OUT EXTRA INFO* ADD (SP),R5 ;ADD THE DEVICE BASE OFFSET! TST (SP)+ ;CLEAN OFF THE STACKR$ MOV ERRUNT,R4 ;GET THE UNIT NUMBER ASL R4 ;MAKE IT WORD OFFSET* ADD R4,R5 ;AND ADD TO GET FINAL ADDRESS# INC (R5) ;SO INCREMENT THAT CELLVCOUTACC: PUT$R #ACCFDB,#BLOCK,#512.,#1,#0;WRITE OUT SHORT TERM BLOCKU(ACCW: CLOSE$ #ACCFDB ;CLOSE UP THE FDB*ACCX: RETURN ;AND RETURN WHENCE WE CAME .PAGE .SBTTL RESET CHECKS;E2; ROUTNE TO CHECK FOR A RESET EMB. IF IT FINDS ONE0; IT SIMPLY PRINTS OUT A MESSAGE ON THE CONSOLE.; RESCHK: MOV #$EMB,R4 ; POINT TO THE EMB/ CMP E$HENC(R4),#> ; RESET?I" BNE 20$ ; IF NOT - SIMPLY RETURN;T; TEST FOR DEVICE_ID SUBPACKET;L) MOV #SM.DID,R0 ; LOAD THE DEVICE_ID MASKL( CALL $GTPAC ; ...AND GET THE SUBPACKET" BCC 10$ ; IF CARRY CLEAR - GO ON' MOV #DIDER,R3 ; NO DEVICE_ID SUBPACKETX" CALL $CONER ; OUTPUT THE MESSAGE BR 20$ ; ...AND RETURN(10$: MOV #$BUFF,R3 ; POINT TO THE BUFFER5 MOV E$ILDV(R4),DEVICE ; PUT THE DEVICE MNEMONIC HEREO, MOV #DEVICE,(R3)+ ; ...AND ITS ADDRESS HERE- MOVB E$ILUN(R4),(R3)+ ; ...AND THE UNIT HERE* CLRB (R3)+ ; TAKE CARE OF THIS+ MOV #RESMSG,R1 ; POINT TO THE INPUT STRINGD- MOV #$BUFF,R2 ; POINT TO THE ARGUMENT BUFFERC, MOV #EDTOUT,R0 ; POINT TO THE OUTPUT BUFFER CALL $EDMSG ; FORMAT THE LINER# MOV #EDTOUT,R3 ; POINT TO THE LINEI& CALL $CONER ; ...AND OUTPUT THE LINE 20$: RETURN ; RETURN TO CALLER .PAGE, .SBTTL DO THE SEND DATA BACK TO CALLER TASK;4<; SEND BACK EXIT STATUS TO INTERFACE TASK AND RETURN TO MAIN;.$RETRN::& SDAT$S #TSKNM ,#$XSTAT ; DO SEND DATA' RETURN ; BACK TO MAIN ERRLOG ROUTINEA .PAGE .SBTTL LIMITING SECTION;O; HANDLE LIMITING HERE.#;FLIM: MOV #$EMB,R4 ; POINT TO THE EMB) BITB #EH$LMR, E$HFLG(R4) ;LIMIT REACHED? BEQ 80$ ;BR IF NO4 MOV #$BUFF,R5 ; POINT TO THE $EDMSG ARGUMENT BUFFER4 CMP E$HENC(R4),#> ; HARD ERROR? BEQ 10$ ; IF SO - GO ONB4 CMP E$HENC(R4),#> ; SOFT ERROR?" BNE 80$ ; IF NOT - SIMPLY RETURN;E; TEST FOR DEVICE_ID SUBPACKET; -10$: MOV #SM.DID,R0 ; LOAD THE DEVICE_ID MASKK( CALL $GTPAC ; ...AND GET THE SUBPACKET" BCC 20$ ; IF CARRY CLEAR - GO ON' MOV #DIDER,R3 ; NO DEVICE_ID SUBPACKETN! BR 35$ ; JOIN COMMON CODE BELOW(; 1; SEE IF THIS ERROR REACHED EITHER OF THE LIMITS.,;;*20$: MOV E$ILDV(R4),R2 ; LOAD THE MNEMONIC& MOV R2,EDTIN ; ...AND PUT IT HERE TOO8 MOV #EDTIN,(R5)+ ; PUT THE ADDRESS OF THE MNEMONIC HERE CLR R1 ; LOAD THEF$ BISB E$ILUN(R4),R1 ; ...UNIT NUMBER& MOV R1,(R5)+ ; ...AND PUT IT HERE TOO7 CALL GETUCD ; 00JTADATADATADATADATADATADATADATADATAGET UCB ADDR, W/O FOLLOWING REDIRECTIONC BCC 30$ ; BR IF O.K., MOV #ELDER,R3 ; NOT AN ERROR LOGGING DEVICE% BR 35$ ; AND JOIN COMMON CODE BELOWP30$: TST R0 ; DID WE GET UCB? BNE 40$ ; IF NE - GO ON % MOV #UCBER,R3 ; DEVICE NOT IN SYSTEM;&35$: CALL $CONER ; OUTPUT THE MESSAGE BR 80$ ; ...AND RETURN40$: MOV #$EMB, R4 ; POINT TO EMB CALL $SWSTK, 70$ ; GOTO SYS STA .IF DF R$$MPL .IFT; %; MAP THE UCB EXTENSION THROUGH APR 6,;)6 MOV U.UCBX(R0),KISAR6 ;; ...AND MAP THE UCB EXTENSION BEQ 60$ ;;NO UCB EXTENSION0 MOV #140000,R0 ;; ...AND CREATE THE APR6 OFFSET .IFTF5 CMP E$HENC(R4),#> ;; HARD ERROR?0! BNE 45$ ;; BR IF NOT HARD ERROR4- MOV #HARD,(R5)+ ;; SAY IT WAS THE HARD LIMITO .IFTS1 MOVB X.ERHL(R0),(R5)+ ;; ...AND RECORD THE VALUE0 .IFF.1 MOVB U.ERHL(R0),(R5)+ ;; ...AND RECORD THE VALUE .IFTF% BR 50$ ;; THEN NOTE THE TEST FAILEDM45$:- MOV #SOFT,(R5)+ ;; SAY IT WAS THE SOFT LIMIT, .IFTM- MOVB X.ERSL(R0),(R5)+ ;;...AND RECORD VALUEN .IFFB1 MOVB U.ERSL(R0),(R5)+ ;; ...AND RECORD THE VALUEN .IFTF;R:; ONE OF THE LIMITS WAS REACHED OR EXCEEDED. INDICATE THIS; BY SETTING USER'S CARRY.;F-50$: CLRB (R5)+ ;; CLEAR THE HIGH ORDER BITSS" MOV @$HEADR,R3 ;; GET TASK HEADER INCB 6(R3) ;; SET USER'S CARRY60$: .ENDC% RETURN ;; RETURN FROM SYSTEM STATE ;U,; NOTE IF CARRY IS SET. IF NOT, SIMPLY EXIT.#; IF IT IS, THEN PRINT THE MESSAGE. ;W$70$: BCC 80$ ; NO PROBLEMS - RETURN;R; FORMAT AND PRINT THE MESSAGE.;F MOV R0,-(SP) ; SAVE R0+* BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMATS BEQ 76$ ;NO. + MOV #UELMSG,R3 ;ASSUME HARD LIMIT REACHED # CMP $BUFF+4,#HARD ;WAS IT REALLY?R" BEQ 75$ ;YES. USE THAT MESSAGE.+ MOV #RELMSG,R3 ;MUST HAVE BEEN SOFT LIMIT *75$: MOV (R3)+,ARGBLK ;GET MESSAGE LENGTH& MOV R3,ARGBLK+2 ;GET MESSAGE ADDRESS/ MOV $BUFF,ARGBLK+4 ;GET MNEMONIC NAME ADDRESSI* MOV $BUFF+2,ARGBLK+6 ;GET MNEMONIC NUMBER MOV #OUTB1+2,R0 ;OUTPUT BUFFER MOV #LOGXCD,R1 ;FORMAT STRINGM MOV #ARGBLK,R2 ;ARGUMENT BLOCK! CALL $EDMSG ;DO THE CONVERSION ) MOV R1,OUTB1 ;SAVE FINAL MESSAGE LENGTHG/ MOV #OUTB1,R3 ;GET MESSAGE DESCRIPTOR ADDRESSA# CALL ECRIT ;OUTPUT TO ERRORS.LOG.76$:, MOV #EDTOUT,R0 ; POINT TO THE OUTPUT BUFFER+ MOV #EXCEED,R1 ; POINT TO THE INPUT STRINGS, MOV #$BUFF,R2 ; POINT TO THE ARGUMENT BLOCK" CALL $EDMSG ; FORMAT THE MESSAGE MOV (SP)+,R0 ; RESTORE R0& MOV #EDTOUT,R3 ; POINT TO THE MESSAGE3 CALL EDQIO ; ...AND NOTIFY THE INTERESTED PARTIEST 80$: RETURN ; RETURN TO CALLER .PAGE* .SBTTL EDQIO - WARNING MESSAGE TO CONSOLE;U; ;AD; THIS ROUTINE TYPES A WARNING MESSAGE TO THE CONSOLE AND ON SYSTEMSC; WITH MULTI USER PROTECTION, TO ANY TERMINALS THAT HAVE ALLOCATEDO; THE ERRING DEVICE.;!; INPUTS: R0 POINTS TO DEVICE UCBT; R3 POINTS TO ASCIZ MESSAGE; ; SIDE EFFECTS: R4 IS DESTROYED;OEDQIO:- BIT #FE.MUP, $FMASK ; MULTI USER PROTECTION?O BEQ 90$ ; BR IF NO CALL $SWSTK, 30$ ; SYSTEM STATE;T2; CHECK TO SEE IF THE DEVICE IS ALLOCATED (OWNED).;R1 TST U.OWN(R0) ;; DOES THIS DEVICE HAVE AN OWNER?E BEQ 5$ ;; BR IF NO OWNER+ MOV U.OWN(R0), R0 ;; GET UCB ADDR OF OWNERN" BR 10$ ;; JOIN COMMON CODE BELOW; ); CHECK TO SEE IF THE DEVICE IS ATTACHED.H;R,5$: TST U.ATT(R0) ;; IS THE DEVICE ATTACHED? BEQ 20$ ;; NO - GIVE UPC5 MOV U.ATT(R0),R0 ;; POINT TO THE ATTACHED TASK'S TCBD6 MOV T.UCB(R0),R0 ;; GET THE UCB ADDRESS OF TASK'S TI:;9; WE HAVE AN OWNER - S,;CONVERT FROM HER UCB (IN R0) TO DEVICE NAME;H10$:;I'; SEE IF TERMINAL IS RECEIVING MESSAGES;;O$ BIT #F3.CLI, $FMASK+4 ;; MULTI-CLI? BEQ 15$ ;; BR IF NOM) BIT #UM.NBR, U.MUP(R0) ;; NOBRO BIT SET? BNE 20$ ;; IF SET, NOBRO15$:" MOV @$HEADR, R1 ;; SAVE UCB IN... MOV R0, (R1) ;; USER R4- MOV #DEVICE, R1 ;; TEMP.BUFF FOR DEVICE NAME $ MOV U.DCB(R0), R2 ;; POINTER TO DCB- MOVB D.NAM(R2), (R1)+ ;; GET DEVICE MNEMONICR MOVB D.NAM+1(R2),(R1)+E) SUB D.UCB(R2), R0 ;; SUB ADDR OF 1ST UCBS% MOV D.UCBL(R2), R1 ;; GET UCB LENGTHC( CALL $DIV ;;00JS" COMPUTE RELATIVE UNIT NO. CLR R3 ;; GET THE LOW% BISB D.UNIT(R2),R3 ;; ...UNIT NUMBERB( ADD R3,R0 ;; COMPUTE ABSOLUTE UNIT NO.' MOVB R0, EDTIN ;; SAVE OWNER'S UNIT NOE BR 25$ ;; GET OUT NOWA*20$: MOV @$HEADR, R3 ;; HERE WHEN NO OWNER INC 6(R3) ;; SET USER CARRYB)25$: RETURN ;; RETURN FROM SYSTEM STATE 30$: BCS 90$ ; BR IF NO OWNER! MOVB EDTIN, R0 ; R0 HAS UNIT NO. 6 BIC #177400, R0 ; COMPENSATE FOR POSSIBLE SIGN EXTEN. .IF DF R$$MPLB.IFF; +; SEND A WARNING TO THE OWNER OF THE DEVICEL;V5 ALUN$S #TILUN,DEVICE,R0 ; ASSIGN LUN TO THE TERMINALR.IFT ; FOR M-PLUS ONLYR' CALL $SWSTK, 38$ ;; ENTER SYSTEM STATE  MOV R0,R1 ;; GET UNIT NUMBER MOV DEVICE,R0 ;; GET NAME' CALL $CVDVN ;; CONVERT TO UCB ADDRESSO& BCS 33$ ;; IF CS SOMETHING WENT AWAY MOV R2,R0 ;; COPY UCB ADDRESS 5 CALL $TISET ;; SET TI AND INCREMENT USE COUNT OF VTR RETURN ;; TO USER33$: MOV @$HEADR, R0 ;; ERROR SO...B INC 6(R0) ;; SET USER CC P37$: RETURN ;; BACK TO USERT 38$: BCS 39$- ALUN$S #TILUN,#"TI ; ASSIGN LUN TO TI DEVICES.ENDC  BCC 40$ ; BR IF NO ERROR39$:& MOV R3,-(SP) ; SAVE R3 ACROSS MESSAGE( MOV #ASLER, R3 ; PRINT ASSIGN LUN ERROR CALL $CONER ; ON CONSOLE MOV (SP)+,R3 ; RESTORE R3* MOV #EX$WAR, $XSTAT ; WARNING EXIT STATUS% BR 90$ ; DON'T TRY TO WARN TERMINALD;S7; SUCCESSFULLY ASSIGNED THE LUN. NOW OUTPUT THE MESSAGER;R+40$: CALL TERER ; WARN THE USER'S TERMINAL ;OH; AT THIS POINT, USER R4 CONTAINS THE OWNER'S UCB. SEE IF THE OWNER WASJ; CO:. IF SO, DON'T REPEAT OURSELVES. NOTE: THIS DOES NOT WORK IF COT IS4; ACTIVE BECAUSE CO: IS NOT REDIRECTED IN THAT CASE.;MD; WARNING: THE CODE IN THIS SYSTEM STATE MUST LIE IN APR5 ON M-PLUS;O& CALL $SWSTK, 80$ ;; GOTO SYSTEM STATE .IF DF R$$MPLW.IFT5 MOV $SAHDB, KISAR6 ;; MAP TO SECONDARY POOL (M-PLUS)S" MOV $SAHPT, R0 ;; GET TASK HEADER.IFF& MOV $HEADR,R0 ; GET MY HEADER ADDRESS.ENDCH7 MOV H.LUN+<*4>(R0),R0 ;; GET UCB ADDR FOR CO: # ;; ($COLOG USES LUN 3 FOR CO:)S< CMP U.RED(R0),U.RED(R4) ;; IS CO: REDIRECTED TO OWNING TI:? BNE 50$ ;; BR IF NOE& MOV @$HEADR, R0 ;; GET HEADER ADDRESS! INC 6(R0) ;; SET USER CARRY BITH$50$: RETURN ; RETURN TO USER STATE(80$: BCS 100$ ; BR IF REDIRECTED TO CO:); SEND THE WARNING MESSAGE TO THE CONSOLEK;R$90$: CALL $CONER ; WARN THE CONSOLE!100$: RETURN ; RETURN TO CALLER .PAGE .SBTTL OPEN LOG FILE SECTIOND;SF; TRY TO OPEN THE LOG FILE IF CLOSED. IF WE COME BACK FROM THE ROUTINEC; TO OPEN WITH FAILURE, STOP LOGGING AND RETURN TO MAIN LINE. ELSE,RD; LOG THE EMB. IF THERE'S AN ERROR, SWITCH FILES TO THE BACKUP FILE@; IF THERE IS NO BACKUP FILE, WARN THE CONSOLE AND STOP LOGGING.; LOG:% MOV #FILTER,R1 ;SELECT MASK ADDRESSF$ CALL $SWSTK,5$ ;GO TO SYSTEM STATE MOV KISAR6,-(SP) ;;SAVE IT+ MOV $ERRX,KISAR6 ;;START OF SEC POOL AREAE BEQ 5$ ;;NOT SET UP% MOV $FILTR,(R1) ;;GET THE USER MASKO MOV (SP)+,KISAR6 ;;RESTORE ITE RETURN ;;BACK TO USER STATET5$:U MOV #$EMB,R2 ;PACKET ADDRESS& MOVB E$HTYC(R2),R2 ;PACKET TYPE CODE, BIC #177400,R2 ;CLEAR OUT UNNEEDED PORTION+ DEC R2 ;OFFSET THE PACKET CODE FROM ZEROB ASL R2 ;MAKE IT A WORD OFFSET3 BIT MASKS(R2),FILTER ;WAS THE PACKET TO BE LOGGED? + BEQ 20$ ;NO. SKIP LOGGING IT IN LOG.ERRE- CALL SPCLOG ;LOG PACKET IN SPECIAL FORMATR! TST $FILOP ; FILE ALREADY OPEN?5 BNE 10$ ; BR IF YES$0 CALL OPNCUR ; ROUTINE TO OPEN AN EXISTING FILE/ CMP #EX$ERR,$XSTAT ; COULD WE GET A FILE OPEN?T BEQ 20$ ; EXIT IF FAILED10$: ; HERE IF WE GOT A FILE; MOV #$EMB, R1 ; EMB ADDR4- MOV EMBLEN, R2 ; SIZE IN BYTES NOT INCL SELFO& PUT$S #$FDB ,R1, R2 ; OUTPUT A RECORD BCC 20$ ; BR IF NO ERROR*12$: CLOSE$ #$FDB ; TRY TO CLOSE THE FILE CLR $FILOP ; CLOSED FILE FLAGG: CALL $OPNER ; HANDLE THE PUT ERROR. TRY FOR BACKUP FILE. CMP #EX$ERR, $XSTAT ; DID WE GET BACKUP FILE?/ BEQ 20$ ; IF NO BR TO TURN OFF LOG AND RETURNE@ PUT$S #$FDB ,R1 ,R2 ; TRY PUT TO BACKUP FILE (NOW THE LOG FILE) BCC 20$ ; BR IF NO ERRORSD CALL $OPNER ; HANDLE00JTADATADATADATADATADATADATADATADATA ERROR OF;! ; ...BACKUP FILE THAT FAILED.E20$: RETURN ; RETURN TO MAIN .PAGE .SBTTL OPEN CURRENT FILET; ; OPEN AN EXISTING LOG FILE...5; TRY TO OPEN BY ID FOR APPEND.. IF FAIL, TRY BY NAMER;IOPNCUR:O. FDOP$R #$FDB,#LOGLUN,#$FILNM,,#FA.SHR,#FA.DLK& CALL MOVFID ; MOVE THE FILE ID, ETC.;X(; IF CARRY WAS SET, TRY TO OPEN BY NAME;F BCS 10$;N5; HERE WHEN GOT FILE ID FROM SYSCM... OPEN BY FILE ID ;K OFID$A #$FDB ; OPEN BY FILE ID BCS 10$ ; BR IF ERRORL! INC $FILOP ; INDICATE FILE OPEN  BR 20$ ; ...AND RETURN;A; MOVE LOG FILE NAME FROM SYSCM TO FILNAM.. ERROR SO TRY FILENAME;$10$: MOV #$ERLOF, R4 ; LOG FILE ADDR MOV #$FILNM, R5 ; DESTINATION. BIS #F.SYS, $FLAG ; SYSTEM STATE FOR THE MOVE CALL $GTFIL ; MOVE! OPEN$A #$FDB ; TRY OPEN BY NAMEF BCC 15$ ; BR IF O.K. CALL $OPNER ; PROCESS ERRORA BR 20$ ; ...AND RETURN 15$: CALL $INITF ; SAVE FILE ID 20$: RETURN ; RETURN TO CALLER .PAGE4 .SBTTL ROUTINE TO MOVE THE FILE ID, SEQUENCE NUMBER;I6; THIS ROUITINE MOVES THE FILE ID, SEQUENCE NUMBER AND9; DEVICE NAME AND UNIT NUMBER FROM SYSCM TO THE FILE NAME; BLOCK FOR $FDB.L; MOVFID:: CALL $SWSTK, 20$ ; SYSTEM STATE .IF DF R$$MPL.# MOV $ERRX, KISAR6 ; MAP TO FILE IDE BEQ 5$ ; BR IF NOT THERE.ENDCD& TST $ERFID ;; FILE ID SAVED ALREADY? BNE 10$ ;; BR IF YES5$:S MOV @$HEADR, R3 ;; SET USER INCB 6(R3) ;; CARRY  BR 20$ ;; BACK TO USER STATE; +; HERE, WE HAVE A FILE ID SO MOVE IT TO FNB ; 10$:) MOV #$ERFID, R0 ;; SYSCM ADDR OF FILE IDE. MOV #$FDB+F.FNB+N.DVNM, R1 ;; AND DEVICE NAME MOV (R0)+, (R1)+ ;; AND UNIT  MOV (R0)+, (R1)+ MOV #$FDB+F.FNB+N.FID, R1 ;; PROGRAM'S FNB  MOV (R0)+, (R1)+ ;; MOVE IT MOV (R0)+, (R1)+ ;; MOVE IT MOV (R0) , (R1)'20$: RETURN ;; BACK FROM SYSTEM STATEI ; ...AND THE SUBROUTINE .PAGE9 .SBTTL ROUTINE TO INIT SYSCM WITH LOG FILE NAME, FILE ID(; =; THE FOLLOWING IS A ROUTINE TO WRITE FILE NAME INFO AND SAVE ); THE FILE ID AND DEVICE NAME AND NUMBER.V;E$INITF::5 MOV #$FDB+F.FNB+N.DVNM,R1 ; POINT TO THE DEVICE NAME; CALL $SWSTK, 10$ ; SYSTEM STATE .IF DF R$$MPL MOV $ERRX, KISAR6 ;; REMAP APR6 BEQ 5$ ;; BR IF NO MAPPING.ENDC00 MOV #$ERFID, R0 ;; SAVE FILE ID AND DEVICE INFO( MOV (R1)+, (R0)+ ;; IN SYSCM.. DEV NAME MOV (R1), (R0)+ ;; DEV UNIT NO.% MOV #$FDB+F.FNB+N.FID, R1 ;; FILE ID  MOV (R1)+ , (R0)+ MOV (R1)+, (R0)+I MOV (R1) , (R0)"5$: RETURN ;; BACK TO USER STATE10$: INC $FILOP ; SET FILE OPEN;I; SAVE FILE NAME IN SYSCM;F$ MOV #$FILNM, R4 ; GET NEW FILE NAME* MOV #$ERLOF, R5 ; GET ADDR OF DESTINATION BIS #F.SYS, $FLAG ; SYSTEM MOVE CALL $GTFL2 ; FILL IT IN RETURN ; BACK FROM SUBROUTINE .PAGE, .SBTTL ERROR WHEN OPENING OR CLOSING A FILE;V8; SEE IF WE HAVE A BACKUP FILE.. IF NOT,SET ERROR STATUS>; IF SO, OPEN THE BACKUP WITH A WARNING STATUS. CALL ERROR MSG; TYPE ROUTINES1; ; SEE IF THERE IS BACKUP FILE ;N$OPNER::$CLSER:: .IF DF R$$MPLC.IFT) CALL $SWSTK, 5$ ; SWITCH TO SYSTEM STATEN MOV $ERRX, KISAR6 ;; REMAP APR6 BEQ 3$ ;; QUIT IF NO MAPPING* TSTB $ERBAF ;; DO WE HAVE A BACKUP FILE? BNE 4$ ;; BR IF SO%3$: MOV @$HEADR, R3 ;; SET USER CARRYK INC 6(R3)4$: RETURN ; RETURN FROM SYS#5$: BCS 20$ ; BR IF HAVE NO BACKUP .IFF& TSTB $ERBAF ; IS BACKUP FILE SIZE 0? BEQ 20$ ; BR IF SO = NO FILE.ENDCA( MOV #LOGER, R3 ; PRINT.. LOG FILE ERROR CALL $CONER ; ON CONSOLE% MOV #EX$WAR, $XSTAT ; WARNING STATUSI;F<;MOVE BACKUP FILE NAME INTO FILNAM AND 0 OUT BACKUP IN SYSCM;$# MOV #$ERBAF, R4 ; BACKUP FILE ADDR; MOV #$FILNM, R5 ; DESTINATION. BIS #F.SYS, $FLAG ; SYSTEM STATE FOR THE MOVE CALL $GTFIL& CALL $SWSTK, 10$ ; GO TO SYSTEM STATE .IF DF R$$MPLN MOV $ERRX, KISAR6 ;; REMAP APR6.ENDCF' CLRB $ERBAF ;; ZERO OUT THE SIZE BYTES# RETURN ;; BACK FROM SYSTEM STATEI310$: FDAT$R #$FDB,#R.VAR,#FD.BLK,,#5 ; INIT THE FDBI. FDOP$R #$FDB,#LOGLUN,#$FILNM,,#FA.SHR,#FA.DLK, OPEN$W #$FDB ; TRY TO OPEN THE BACKUP FILE BCS 20$ ; BR IF ERRORS CALL $INITF ; SAVE FILE ID00JS" BR 30$ ; ...AND RETURN;A6; HERE IF NO BACKUP FILE OR IF CANNOT OPEN BACKUP FILE;S'20$: MOV #BACER, R3 ; BACKUP FILE ERRORC CALL $CONER ; TYPE IN ON CO:# MOV #EX$ERR, $XSTAT ; ERROR STATUSA CALL $SWSTK, 30$ ; SYSTEM STATE8 BIC #ES.LOG!ES.DAT, $ERFLA ;; TURN OFF LOGGING AND DATA. BITB #ES.LIM, $ERFLA ; ARE WE DOING ANYTHING? BNE 30$ ; BR IF SO5 BICB #ES.INI, $ERFLA ; INDICATE LOGGER SHUTTING DOWN 830$: RETURN ;; RETURN FROM SYSTEM STATE AND SUBROUTINE .PAGE .SBTTL GET THE NEXT SUBPACKET; ; FIND THE SPECIFIED SUBPACKET.O;C4; INPUT: R0 CONTAINS BIT POSITION OF DESIRED PACKET; R2 DESTROYEDP#; R4 POINTS TO BEGINNING OF PACKET ;C6; OUTPUT: CARRY CLEAR - R4 POINTS TO DESIRED SUBPACKET.; CARRY SET - DESIRED SUBPACKET DOESN'T EXIST;T; $GTPAC::0 MOV E$HSBF(R4),R2 ; PICK UP THE SUBPACKET FLAGS;H3; TEST TO SEE IF THERE IS A DESIRED SUBPACKET FLAG.N;A.10$: TST R0 ; DESIRED SUBPACKET FLAG PRESENT?+ BEQ 30$ ; NO - NOTE THE TST CLEARED CARRY.;T;; DESIRED SUBPACKET FLAG IS PRESENT. SHIFT IT TO THE RIGHT.O8; IF CARRY GETS SET, R4 POINTS TO THE DESIRED SUBPACKET.<; IF CARRY IS CLEARED, UPDATE R4 IF NECESSARY AND LOOP BACK.;U# ASR R0 ; IS THIS THE ONE WE WANT?R BCS 20$ ; IF CARRY SET - YES;D8; CARRY WAS CLEARED - THIS IS NOT THE SUBPACKET WE WANT.B; SHIFT R2. IF CARRY IS SET, THIS UNWANTED SUBPACKET EXISTS AND R4=; NEEDS TO BE UPDATED. IF CARRY IS CLEARED, R4 IS O.K. AS IS.F; % ASR R2 ; DOES THIS SUBPACKET EXIST? " BCC 10$ ; IF CARRY IS CLEAR - NO ADD (R4),R4 ; YES, UPDATE R4& BR 10$ ; ...AND LOOP BACK TO THE TOP;S>; THIS IS THE DESIRED SUBPACKET. SHIFT R2 TO SEE IF IT EXISTS.@; IF CARRY IS SET, IT DOES. IF CARRY IS CLEAR, IT DOESN'T EXIST.;B*20$: ASR R2 ; SEE IF THE SUBPACKET EXISTS;L.; REVERSE THE SENSE OF THE CARRY BIT AND EXIT.; #30$: BCC 40$ ; BRANCH IF CARRY SETB' CLC ; CLEAR CARRY (INDICATE SUCCESS)E" BR 50$ ; ...AND RETURN TO CALLER)40$: SEC ; SET CARRY (INDICATE FAILURE)E'50$: RETURN ; ...AND RETURN TO CALLERO .PAGE .SBTTL TERMINAL I/O ROUTINES0;+&; *** - $CONER - CONSOLE ERROR MESSAGE; J; *** - TERER - TERRMINAL ERROR MESSAGE AND SET STATUS TO EX$ERR (IO.WBT);S=; *** - TERMSG - TERMINAL ERROR MESSAGE (NO CHANGE IN STATUS)I;H*; *** - WRIT - TERMINAL MESSAGE (IO.WVB);T; INPUT:%; R3 - MESSAGE ADDRESS (ASCIZ STRING)H; ;- .ENABL LSB TERER::C& MOV #EX$ERR,$XSTAT ; SET ERROR STATUSTERMSG::, MOV #IO.WBT,ODPB+Q.IOFN ; SET FUNCTION CODE- MOV #ERRPRE,ERRBUF ; SET "ERRLOG -- " PREFIXE BR 10$ ; JOIN COMMON CODEIWRIT::, MOV #IO.WVB,ODPB+Q.IOFN ; SET FUNCTION CODE% MOV #ERRNUL,ERRBUF ; SET NULL PREFIXM&10$: CALL $SAVAL ; SAVE ALL REGISTERS( MOV #$COBUF,R0 ; POINT TO OUTPUT BUFFER# CALL PREMSG ; PREPARE THE MESSAGE ) MOV R1,ODPB+Q.IOPL+2 ; SET BUFFER LENGTHN DIR$ #ODPB ; WRITE IT OUT( RETURN ; RETURN .DSABL LSBS;1; ROUTINE TO OUTPUT ERROR MESSAGES TO THE CONSOLEE;G$CONER::/ BIT #EL.ICM,$EFMSK ;INHIBIT CONSOLE MESSAGES?P BNE 10$ ;YES. JUST RETURNE" CALL $SAVAL ; SAVE ALL REGISTERS% MOV #$COBUF, R0 ; GET BUFFER ADDRESST- MOV #ERRPRE,ERRBUF ; SET "ERRLOG -- " PREFIXP# CALL PREMSG ; PREPARE THE MESSAGEL$ CALL $COLOG ; CALL CONSOLE LOGGING3 CALL $COWAT ; WAIT FOR THE I/O TO CO: TO COMPLETE10$: ;REFERENCE LABEL  RETURN ; RETURN TO CALLER;I; ROUTINE TO PREPARE MESSAGES;S%; INPUT: R0 - POINTS TO OUTPUT BUFFER ;SPREMSG:H& MOV R3,ERRBUF+2 ; SET THE TEXT STRING, MOV #ERREDM,R1 ; POINT TO THE $EDMSG STRING/ MOV #ERRBUF,R2 ; POINT TO THE $EDMSG ARGUMENTSG CALL $EDMSG ; FORMAT THE LINEF RETURN ; ...AND RETURNE .PAGE#.IF DF R$$MPL ; M-PLUS CONDITIONALGE .SBTTL M_PLUS SPECIFIC ROUTINE TO PLAY WITH UCB EXTENSION FOR ERRPRCC; $; MAP THE UCB EXTENSION THROUGH APR6;0$MUCB2::. MOV KISAR6,-(SP) ;; SAVE CURRENT APR6 MAPPING6 MOV U.UCBX(R0),KISAR6 ;; ...AND MAP THE UCB EXTENSION$ BEQ 60$ ;; NO UCB EXTENSION HERE!! MOV R0,-(SP) ;; SAVE R00 MOV #140000,R0 ;; ...AND CREATE THE APR6 OFFSET TSTB (R5)+ ; HARD LIM CHAN00JNTADATADATADATADATADATADATADATADATAGE?E BEQ 28$ ; BR IF NO& MOVB (R5), X.ERHL(R0) ;;MOVE HARD LIM BR 30$ ;; JOIN COMMON CODE/28$: MOVB X.ERHL(R0),(R5) ;; NOTE CURRENT VALUES30$:% TSTB (R5)+ ; POINT AT SOFT LIM FLAGR TSTB (R5)+ ;; SOFT LIM CHANGE? BEQ 40$ ;; BRANCH IF NO ' MOVB (R5), X.ERSL(R0) ;; MOVE SOFT LIM  BR 50$ ;; JOIN COMMON CODE/40$: MOVB X.ERSL(R0),(R5) ;; NOTE CURRENT VALUE 50$: MOV (SP)+,R0 ;; RESTORE R0,,60$: MOV (SP)+,KISAR6 ;; ...AND APR6 MAPPING RETURN ;; RETURN TO CALLER) .ENDC ; R$$MPLE .PAGE5 .SBTTL .GFLTR RETURN FILTER MASK FROM SECONDARY POOL.GFLTR::( MOV KISAR6,-(SP) ;;SAVE CURRENT MAPPING1 MOV $ERRX,KISAR6 ;;MAP US TO SECONDARY POOL AREAP BEQ 1$ ;;NO MAPPING WAS MADE9 MOV 83.(R4),$FILTR ;;SAVE THE USER SPECIFIED FILTER MASK , MOV (SP)+,KISAR6 ;;GET BACK THE OLD MAPPING51$: RETURN ;;RETURN TO CALLER WITH ORIGINAL MAPPINGU .PAGE. .SBTTL .MVBF1 MOVE BUFFER FROM SECONDARY POOL.MVBF1::& CALL $SWSTK,2$ ;GET INTO SYSTEM STATE( MOV #$BUFF,R5 ;;GET DESTINATION ADDRESS& CLR $BUFF ;;INDICATE BLANK FILE NAME. MOV $ERRX,KISAR6 ;;MAP TO SECONDARY POOL AREA% BEQ 2$ ;;NO MAPPING, SO WE ARE DONEX' MOVB (R4)+,R2 ;;SIZE OF BUFFER TO MOVE BEQ 2$ ;;NOTHING TO MOVE" MOVB R2,(R5)+ ;;SAVE SIZE OF NAME1$: ) MOVB (R4)+,(R5)+ ;;MOVE PART OF THE NAMEE SOB R2,1$ ;;MOVE ENTIRE NAME12$: RETURN ;;RETURN TO USER STATE AND TO CALLER. .PAGE. .SBTTL .MVBF2 MOVE BUFFER FROM SECONDARY POOL.MVBF2::& CALL $SWSTK,2$ ;GET INTO SYSTEM STATE. MOV $ERRX,KISAR6 ;;MAP TO SECONDARY POOL AREA% BEQ 2$ ;;NO MAPPING, SO WE ARE DONER MOV #$BUFF,R4 ;;INPUT' MOVB (R4)+,R2 ;;SIZE OF BUFFER TO MOVE  BEQ 2$ ;;NOTHING TO MOVE" MOVB R2,(R5)+ ;;SAVE SIZE OF NAME1$: ) MOVB (R4)+,(R5)+ ;;MOVE PART OF THE NAME  SOB R2,1$ ;;MOVE ENTIRE NAME12$: RETURN ;;RETURN TO USER STATE AND TO CALLERA .END $ERLOG ;;RETURN TO USER STATE AND TO CALLER. .PAGE. .SBTTL .MVBF2 MOVE BUFFER FROM SECONDARY POOL.MVBF2::& CALL $SWSTK,2$ ;GET INTO SYSTEM STATE. MOV $ERRX,KISAR6 ;;MAP TO SECON1 .TITLE ERRPRC - SUBROUTINE OF ERROR LOGGING TASKN .IDENT /V04.01/;I;T;M#; COPYRIGHT (C) 1981, 1985 BY ); DIGITAL EQUIPMENT CORPORATION, MAYNARD+(; MASSACHUSSETTS. ALL RIGHTS RESERVED.; 5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAYE5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THEA5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERB5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISEX5; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TOE5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.;15; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T;B; MODULE ERRPRC.MACA;N8; VERSION: V04.00 INITIAL RELEASE OF RSX-11M-PLUS V3.0; MICRO/RSX V3.0;N1; V04.01 CORRECT UNK INT / MEM PAR ERR PROBLEM;R; AUTHOR: S. ADAMS;I ; DATE: '81 ;I; PREVIOUSLY MODIFIED BY:; ; C. PUTNAM ; S. ADAMS ; B. MCCARTHY;R; MODIFIED BY:;I; J. MELVIN 16-MAY-83 B; JM001 CONDITIONALIZE CONSOLE MESSAGE INHIBIT FOR MICRO RSX; ; J. MELVIN 20-MAY-83 :; JM003 PROCESS ERRORS.ACC, ERRORS.LOG FOR MICRO RSX;T; J. MELVIN 25-JUL-83 A; JM012 INSURE HARD/SOFT LIMIT MESSAGE OUTPUT TO ERRORS.LOG ; ; J. MELVIN 27-APR-840; JM0030 ALLOW MU AS VALID ERROR LOG DEVICE;R; J. MELVIN 04-JAN-85:; JJM105 CORRECT PROBLEM WITH UNK INT / MEM PAR MIXUP;M); G. MARIGOWDA 02-MAY-85IJ; GM100 CLOSE THE OLD FILE BEFORE CREATING THE NEW FILE;S; FUNCTION OF THIS MODULE:;<; THIS CONTAINS THE SUBROUTINES THAT PROCESS THE COMMAND EMB;OD; INPUT - R4 CONTAINS THE ADDRESS OF OFFSET 0 IN CURRENT COMMAND EMB;E; ROUTINES AND THEIR FUNCTIONS00NS":O;RA; $PRCMD - CALLED TO PROCESS ANY CMD EMB. IT CALLS THE FOLLOWINGI ; STATUS - CHANGE LOG/LIM STATUS; SWI - SWITCH LOG FILES; APP - APPEND FILES4; GETPUT - CALLED BY SWI AND APP TO DO PUTS AND GETS; GER - GET ERROR; PUR - PUT ERROR; BAC - PROCESS /BAC; CHA - CHANGE LIMITS >; OPEN - OPENS GIVEN LOG FILE (/NV OR /-NV) AND SAVES FILE ID.I; $GTFIL - MOVES FILENAME FROM FORMAT OF SIZE BYTE, NAME TO 6 WORD BUFFERDI; $GTFL2 - MOVES FILENAME FROM 6 WORD BUFFER TO FORMAT OF SIZE BYTE, NAMES;R"STO = 0 ; CODE FOR STOP LIM OR LOG#STA = 1 ; CODE FOR START LIM OR LOGT,NOCHA = 2 ; CODE FOR NO CHANGE TO LIM OR LOG;F .ENABL LC .NLIST BEX!TSKER: .ASCIZ /No Task subpacket/O"ACTER: .ASCIZ /Logging not active/.SUBER: .ASCIZ /Unknown command packet subtype/!DATER: .ASCIZ /No Data subpacket/V#OPEER: .ASCIZ /Unable to open file/IGPER: .ASCIZ %File I/O error%M#PRVER: .ASCIZ /Privilege violation/ (CORER: .ASCIZ /Task subpacket corrupted/&LOGER: .ASCIZ /Logging already active/#BAKER: .ASCIZ /Bad Backup filename/ *LOGINI: .ASCIZ /Error Logging initialized/&LOGSTP: .ASCIZ /Error Logging stopped/ .EVEN; ; MACRO CALLSC;.; .MCALL OPEN$A,OFID$A,OPEN$W,OPEN$R,CSI$,CSI$1,CSI$2,CLOSE$I/ .MCALL FDBDF$,FDAT$R,FDOP$A,FDRC$A,PUT$S,GET$Sm. .MCALL DELET$,ALUN$S,SDAT$S,DIR$,GTIM$S,QIOW$ .MCALL EPKDF$,FDOP$R ;a CSI$ ; SET UP CSI OFFSETSC, EPKDF$ ; SET UP ERROR MESSAGE PACKET DEF'S. .MCALL OFID$M,OPEN$M,GTIM$C,READ$,WRITE$,PUT$ .MCALL GET$R,PUT$Rg .MACRO .TEXTC,A .EVEN. .NCHR TXTLEN, .WORD TXTLEN .ASCII @A@ .EVEN .ENDM ;TEXTCO3ERRTMP: .WORD 0 ; HOLDER FOR POINTER TO ERROR TEXTR(DATSIZ: .WORD 0 ; SIZE OF DATA SUBPACKET"CSIBLK: .BLKB C.SIZE ; USED BY CSIBFILFLG: .BLKB 1 ; FILE FLAG USED TO INDICATE TO THE OPEN FILE SUBR) ; WHETHER TO OPEN A NEW VERSION OR NOTF .EVEN0TMPNAM: .BLKW 6 ; NAME OF TEMP FILE (SEE TMPFDB);RD; FDB FOR TEMP FILE.. EG FILE BEING APPENDED TO LOG FILE OR SWI FROM;U$TMPFDB: FDBDF$ ; DEFINE FDB OFFSETS FDOP$A TMPLUN,TMPNAM,,FO.RD> FDRC$A ,$TMPBF,$MAXLN ; DEFINE RECORD ACCESS.. GETS TO $TMPBF0FLGCLO: .WORD 0 ;CLOSE FILE AFTER WRITING FLAG#ERRDEV::.WORD 0 ;DEVICE MNEMONIC S ERRUNT::.WORD 0 ;UNIT NUMBER!CREMSG::.TEXTC <* File Created *>A*INIMSG::.TEXTC <* Error Logging Started *>$MPMSG:: .TEXTC *ENDMSG::.TEXTC <* Error Logging Stopped *>1RIOMSG::.TEXTC 3UIOMSG::.TEXTC D/HTOMSG:: .TEXTC ,/STOMSG:: .TEXTC C*MOUMSG:: .TEXTC -DMOMSG:: .TEXTC D/LIMMSG::.TEXTC R3UIMSG:: .TEXTC C9UNSMSG::.TEXTC -BRMSG:: .TEXTC 4BADMSG::.TEXTC 7UELMSG::.TEXTC T5RELMSG::.TEXTC : NULL == 0f FMTDEV == 1o VECTOR == 2C IGNORE == 3E VOLUME == 4qL;===========================================================================>;THE FOLLOWING TABLES ARE ORDER DEPENDENT. DO NOT CHANGE THEML;=========================================================================== .EVENMSGTAB::.WORD UIOMSG ;0 .WORD RIOMSG ;1  .WORD HTOMSG ;2< .WORD STOMSG ;3N .WORD UNSMSG ;4E .WORD LIMMSG ;5o .WORD BRMSG ;6 .WORD MPMSG ;7 .WORD UIMSG ;8 .WORD MOUMSG ;9i .WORD DMOMSG ;10 .WORD BADMSG ;11FMTTAB::.BYTE FMTDEV ;UIOMSGU .BYTE FMTDEV ;RIOMSG .BYTE FMTDEV ;HTOMSG .BYTE FMTDEV ;STOMSG .BYTE FMTDEV ;UNSMSG .BYTE FMTDEV ;LIMMSG .BYTE FMTDEV ;BRMSGG .BYTE NULL ;MPMSG= .BYTE VECTOR ;UIMSG= .BYTE VOLUME ;MOUMSG .BYTE VOLUME ;DMOMSG .BYTE IGNORE ;BADMSG .EVEN"VALPKT::.BYTE E$CERR,E$SDVH ;1 UIO .BYTE E$CERR,E$SDVS ;2 RIOS .BYTE E$CERR,E$STMO ;3 HTO. .BYTE E$CERR,E$STMS ;4 STO .BYTE E$CERR,E$SUNS ;5 UNSS00NTADATADATADATADATADATADATADATADATA .BYTE E$CDCI,E$SRES ;6 LIM.5SINGLE == <.-VALPKT>/2. ;ABOVE ARE DEVICE DEPENDANT. .BYTE E$CDCI,E$SRCT ;7 BR .BYTE E$CMEM,E$SMEM ;8 MP .BYTE E$CCPU,E$SINT ;9 UI6NOPROC == <.-VALPKT>/2. ;ABOVE ARE SINGLE CELL ACCUM .BYTE E$CDCI,E$SMOU ;10 MOU .BYTE E$CDCI,E$SDMO ;11 DMO ;ABOVE ARE SPECIAL PACKETSGBADPKT::.BYTE 0,0 ;12 BADFILLER::.BYTE '?,'?,0R FORMAT::.ASCIZ / %3Z%VS%Y %VA /DEVFMT::.ASCIZ /%VA%VA%O: %VA/;VECFMT::.ASCIZ /%VA%P/ERRFMT::.ASCIZ /%VA%2B/E .EVEN'LABEL:: .ASCII / / ;DUMMY VOLUME LABEL.LOGXCD::.ASCIZ /%VA%2A%O:/ .EVENL;===========================================================================;;THE ABOVE TABLES ARE ORDER DEPENDENT. DO NOT CHANGE THEM.AL;===========================================================================; ; JUMP TABLE;P:JMPTBL: E$SSTA, STATUS ; STATUS CHANGE (NO)LOG,(NO)LIM EMB E$SSWI, SWI ; SWITCH  E$SAPP, APP ; APPENDF E$SBAC, BAC ; BACKUP FILE E$SCHL, CHA ; CHANGE LIMITS 0, 0 ; END OF TABLE .PAGE .SBTTL MAIN LINE CODE; ; D; FIRST SEE IF THERE'S A TASK SUBPACKET. IF NOT ERROR. IF SO, GET IT+; AND SAVE TASK DEVICE NAME, UNIT AND FLAG.=;=$PRCMD::& MOV #EX$SUC, $XSTAT ; INIT TO SUCCESS% MOV R4, R3 ; SAVE OFFSET 0 IN HEADER=* MOV #SM.TSK, R0 ; GET TASK SUBP. POSITION& CALL $GTPAC ; GET THE TASK SUBPACKET BCC 10$ ; BR IF GOT IT# MOV #TSKER, R3 ; NO TASK SUBPACKETI/ BIT #EL.ICM,$EFMSK ;INHIBIT CONSOLE MESSAGES?; BNE 3$ ;YES.S9 CALL $CONER ; MSG CO: SINCE DON'T KNOW TI: W/O TASK SUBB3$: ;REFERENCE LABEL$5$: MOV #EX$ERR, $XSTAT ; ERROR EXIT CALLR $RETRNO10$:& MOV E$TTSK(R4), TSKNM ; GET TASK NAME MOV E$TTSK+2(R4), TSKNM+2- MOV E$TTID(R4), TSKDN ; GET TASK DEVICE NAMEV) MOVB E$TTIU(R4), TSKUN ; GET DEVICE UNITM" MOVB E$TFLG(R4), TSKFL ; GET FLAG;L#.IF DF R$$MPL ; M-PLUS CONDITIONALB.IFF ALUN$S #TILUN,TSKDN,TSKUN.IFT& CALL $SWSTK,107$ ; ENTER SYSTEM STATE MOV TSKDN,R0 ;; GET DEVICE NAME! MOVB TSKUN,R1 ;; GET UNIT NUMBER ! BIC #177400, R1 ;; CLEAR GARBAGEU' CALL $CVDVN ;; CONVERT TO UCB ADDRESS$ BCC 105$ ;; IF OK ,BR MOV @$HEADR, R0 INCB 6(R0) ;; SET USER CARRY RETURN ;; BACK TO USER4105$:M MOV R2,R0 ;; COPY UCB ADDRESST5 CALL $TISET ;; SET TI AND INCREMENT USE COUNT OF VTU ;; IF REQUIRED RETURN 107$:L BCS 109$ ; BR IF ERROR- ALUN$S #TILUN,#"TI ; ASSIGN LUN TO TI DEVICET.ENDCI& BCC 11$ ; IF ASSIGN LUN FAILED, TASK109$:V* MOV #CORER, R3 ; PACKET MUST BE CORRUPTED/ BIT #EL.ICM,$EFMSK ;INHIBIT CONSOLE MESSAGES?A BNE 5$ ;YES.D CALL $CONER T BR 5$ S;;; CHECK FOR PRIVILEGED TERMINAL IF OTHER THAN A SHO COMMANDE$; IS GIVEN, CHECK FOR DATA SUBPACKET;11$:$ MOV R3, R4 ; RESTORE TOP OF PACKET( MOVB E$HTYS(R4), R1 ; SAVE SUBTYPE CODE$ BITB #ET$PRI,TSKFL ; TERMINAL PRIV? BNE 12$ ; BR IF YES;% MOV #PRVER, R3 ; PRIVILEGE VIOLATIONI CALL TERER ; TYPE CALLR $RETRN$12$:1 MOV #SM.DAT, R0 ; GET POSITION OF DATA SUBPACKET " CALL $GTPAC ; GET DATA SUBPACKET BCC 15$ ; BR IF GOT IT# MOV #DATER, R3 ; DATA FORMAT ERROR  CALL TERER ; MSG TO TERMINAL- CALLR $RETRN ; FINISH UP AND BACK TO ERRLOGO;E15$:;V?; GOT DATA SUBPACKET, MATCH COMMAND AND JUMP TO PROCESS COMMANDP; ; INPUT TO GETPAC R0 AND R4;;V/ MOV (R4)+, DATSIZ ; GET SIZE OF DATA SUBPACKETI;?; R4 POINTS TO THE DATA PACKET AND R1 CONTAINS THE SUBTYPE CODEC; & BIC #177400, R1 ; CLEAR OFF HIGH PART) MOV #JMPTBL, R0 ; GET ADDR OF JUMP TABLEC20$:3 CMP (R0)+, R1 ; MATCH BETWEEN TABLE AND GIVEN CMD?  BEQ 30$ ; BR IF YES ' TST (R0)+ ; POINT TO NEXT TABLE ENTRYT BNE 20$ ; LOOP IF NOT ZERO&; FELL THROUGH... UNRECOGNIZED COMMAND;V! MOV #SUBER, R3 ; ILLEGAL COMMANDN CALL TERER ; ON TERMINAL CALLR $RETRN ; 30$: JMP @(R0) ; JUMP TO PROCESSS .PAGE .SBTTL PROCESS STATUS CHANGE ;PJ; (NO)LOG (NO)LIM R4 POINTS AT DATA SUBPACKET - SET OR RESET SYSCM FLAGS;1?; SEE IF NEED TO CHANGE LIM STATUS, THEN LOG STATUS. IF CLR LOGCB; CHECK IF LIM IS STILL ON. IF NOT, DE INITIALIZE BECAUSE IF THEREG; ARE ANY ERROR EMB'00N&S"S IN QUE, WE MUST REJECT THEM. IE WE CAN'T WAIT FORO6;"BYE" TO SEE THERE ARE NO EMB'S AND NO LIM AND NO LOG;STATUS:E# CALL $SWSTK, LOGFIL ; SYSTEM STATE ' CMPB #NOCHA, (R4) ;; NO CHANGE TO LIM? BEQ LOG ;; IF SO, BR CMPB #STA, (R4) ;; START LIM? BEQ 10$ ;; IF SO , BR)) BICB #ES.LIM, $ERFLA ;; HERE TO STOP LIM  BR LOG ;; ON TO NEXT010$: BISB #ES.LIM, $ERFLA ;; HERE TO TURN ON LIM;ALOG: TSTB (R4)+ ;; LOOK AT LOG SLOT$ CMPB #NOCHA, (R4) ;; NO CHA TO LOG? BEQ 20$ ;; BR IF NO CHANGE CMPB #STA, (R4) ;; START LOG? BNE 10$ ;; BR IF NOT START; B; HERE, START LOGGING. CANNOT ALLOW THIS IF LOGGING ALREADY ACTIVE5; BECAUSE THIS CONFUSES THE NAME OF THE CURRENT FILE.G;O( BITB #ES.LOG!ES.DAT, $ERFLA ;; LOGGING? BEQ 7$ ;; BR IF NOTB0 MOV #LOGER, ERRTMP ;; SET POINTER TO ERROR TEXT.5$: MOV @$HEADR, R3 ;; GET SAVED STACK POINTER- INCB 6(R3) ;; SET CARRY.. ERROR..LOG ACTIVE BR 20$ ;; GET OUT NOWK87$: BISB #ES.LOG!ES.DAT, $ERFLA ;; HERE TO START LOGGING, CALL .GFLTR ;;PUT FILTER MASK IN SEC POOL BR 20$ ;; GET OUT NOW ;N;; STOP LOGGING SO SET THE OVERRIDE BIT, SAYING LOG THIS EMBG"; EVEN THOUGH LOGGING IS DISABLED.;U410$: BITB #ES.LOG!ES.DAT, $ERFLA ;; LOGGING ACTIVE ?$ BNE 12$ ;; IF NE YES, STOP LOGGING0 MOV #ACTER, ERRTMP ;; SET TEXT ADDRESS OF ERROR& BR 5$ ;; FINISH IN COMMON ERROR CODE412$: BIS #F.OVR, $FLAG ;; SET OVERRIDE AND STOP BITS, BICB #ES.LOG!ES.DAT, $ERFLA ;; STOP LOGGING;BC; IF LOGGING AND LIMITING WERE MADE INACTIVE, CLR .INI AND ON EXIT,TB; CLR $ERRPT. THIS EFFECTIVELY REINITIALIZES ERRLOG FOR NEXT TIME ; AROUND.H20$:5 BICB #ES.INI, $ERFLA ;; ASSUME LOGGING/LIM SHUT DOWNS4 BITB #ES.LOG!ES.DAT!ES.LIM, $ERFLA ; SHUTTING DOWN? BEQ 25$ ;; BR IF YES* BISB #ES.INI, $ERFLA ;; NOT SHUTTING DOWN25$: RETURN ; BACK TO USER;8; IF CARRY IS SET, LOG WAS GIVEN WHEN LOGGING WAS ACTIVE;GLOGFIL:V BCC 10$ ; BR IF OK. MOV ERRTMP, R3 ; GET ADDRESS OF ERROR MESSAGE2 CALL TERER ; ISSUE LOGGING ACTIVE/NOT ACTIVE MSG CALLR $RETRNT;5; SEE IF LOGGING WAS STARTED AND IF SO, DO FILE STUFFR;X10$: ! TSTB (R4)+ ; LOOK AT LOG STATUSR CMPB #STA, (R4) ; WAS IT START? BEQ 15$ ; BR IF YEST' CMPB #STO,(R4) ; LOGGING JUST STOPPED?$ BNE 12$ ; IF NE - NO+ MOV #LOGSTP,R3 ; YES, POINT TO THE MESSAGET/ BIT #EL.ICM,$EFMSK ;INHIBIT CONSOLE MESSAGES?W BNE 11$ ;YES. CALL $CONER ; ...AND OUTPUT IT11$: ;REFERENCE LABEL,2 BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT ENABLED? BEQ 111$ ;NO.% MOV #ENDMSG,R3 ;LOGGING HAS STOPPED % CALL ECRIT ;WRITE INTO ERRORS.LOGO111$: ;REFERENCE LABEL12$: CALLR $RETRN ; DONEA;RB; START LOGGING -- SET FLAGS AND MOVE IN THE DEFAULT OR GIVEN FILE;(15$:: MOV #$FILNM, R5 ; ADDR OF WHERE WE WILL PUT LOG FILE NAME" TSTB (R4)+ ; POINT TO FLAGS BYTE;#.; MOVE IN DEFAULT NAME (TO R5) AND /DE/NV FLAG;$% MOV #LENSY, (R5)+ ; LENGTH OF DEVICEU MOV #DEFSY, (R5)+ ; DEFAULT SY:# MOV #LENUFD, (R5)+ ; LENGTH OF UFDR! MOV #DEFUFD, (R5)+ ; DEFAULT UFDV$ MOV #LENNAM, (R5)+ ; LENGTH OF NAME! MOV #DEFNAM,(R5)+ ; DEFAULT NAMEO MOVB (R4)+, FILFLG ; GET FLAGS: TSTB (R4) ; ZERO FILE SIZE?T BEQ 30$ ; BR IF YESS;DC; MOVE IN GIVEN FILE NAME.. R4 POINTS AT DATA SUB. FILE LENGTH BYTE ;W+ MOV #$FILNM, R5 ; OUTPUT BUFFER FOR GETFIL; CALL $GTFIL#30$: CALL OPEN ; OPEN THE LOG FILEO4 CMP #EX$ERR, $XSTAT ; ERROR OPENING LOG AND BACKUP? BEQ 40$ ; BR IF YES,2 MOV #LOGINI,R3 ; POINT TO THE INITIALIZED MESSAGE/ BIT #EL.ICM,$EFMSK ;INHIBIT CONSOLE MESSAGES?# BNE 35$ ;YES.- CALL $CONER ; ...AND SEND IT TO THE CONSOLEO35$: ;REFERENCE LABEL 2 BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT ENABLED? BEQ 45$ ;NO. 7 BITB #ZEFLAG!UPFLAG,FILFLG ;CHECK FOR SPECIAL FUNCTIONG% BEQ 45$ ;BR IF NONE TO WORRY ABOUT - CALL ZERUPD ;HANDLE THE ZEROING / UPDATINGN45$: ;EXIT POINT40$:2 BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT ENABLED? BEQ 50$ ;NO* MOV #INIMSG,R3 ;LOGGING BEING STARTED UP$ CALL ECRIT ;WRITE INTO ERRORS.LOG50$: ;REFERENCE LABELB JMP $RETRN00N.TADATADATADATADATADATADATADATADATA ; DONE .PAGE .SBTTL ZERUPD PROCESSINGS/ZERUPD: DELET$ #LOGFDB ;DELETE LATEST VERSIONF( MOV #CREMSG,R3 ; MESSAGE& CALL ECRIT ;WRITE OUT TO ERRORS.LOG# CALL OPNACC ;OPEN THE ERRORS.ACC$" BCS EXITZE ;COULDN'T BE OPENED.730$: BITB #ZEFLAG,FILFLG ;DO WE HAVE TO ZERO THE FILE?T+ BEQ GETREC ;BR IF NO. IT MUST BE UPDATEI/ MOV #BUFSIZ,R4 ;NUMBER OF WORDS TO CLEAR OUT.R# MOV #BLOCK,R3 ;AREA TO CLEAR OUT.C40$: CLR (R3)+ ;CLEAR IT.0# DEC R4 ;INDICATE ONE LESS TO DO.N BGE 40$ ;DO ENTIRE AREA.U6 GTIM$C BLOCK+AL.ZER ;PUT DATE/TIME IN FOR ZERO FIELD! BR PUTREC ;FILE IS NOW ZEROED.R=GETREC: GET$R #ACCFDB,#BLOCK,#512.,#1,#0;GET SHORT TERM BLOCKP6 GET$R #ACCFDB,#BLOCK2,#512.,#2,#0;GET LONG TERM BLOCK- MOV #SHORT,R3 ;SIZE OF THE ACCUMULATOR AREA 9 MOV #BLOCK+AL.ACC,R4 ;POINTER TO SHORT TERM ACCUMULATORSD9 MOV #BLOCK2+AL.ACC,R5 ;POINTER TO LONG TERM ACCUMULATORSV560$: ADD (R4),(R5)+ ;ADD SHORT TERM ACC TO LONG TERML* CLR (R4)+ ;CLEAR SHORT TERM ACCUM VALUE% DEC R3 ;ONE LESS ACCUMULATOR TO DO$# BGT 60$ ;DO ALL THE ACCUMULATORS ?PUTREC: GTIM$C BLOCK+AL.UPD ;PUT DATE/TIME IN FOR UPDATE FIELDC> PUT$R #ACCFDB,#BLOCK,#512.,#1,#0;WRITE OUT SHORT TERM SECTION0 MOV #<*2>,R1 ;NUMBER OF WORDS TO MOVE@15$: MOV BLOCK(R1),BLOCK2(R1) ;MOVE DATE FROM SHORT TERM TO LONG# SUB #2,R1 ;ONE LESS WORD TO MOVEL" BGE 15$ ;MOVE ENTIRE DATE FIELD> PUT$R #ACCFDB,#BLOCK2,#512.,#2,#0;WRITE OUT LONG TERM SECTION)CLOSE: CLOSE$ #ACCFDB ;AND CLOSE IT UP.V*EXITZE: RETURN ;GO BACK WHENCE WE CAME. .PAGEECRIT::A0 CLR FLGCLO ;INSURE FILE IS CLOSED AFTER WRITE" MOV #LGFID$,R4 ;USING ERRORS.LOG. CALL GETFID ;GET FID FOR IT IF THERE IS ONE$ BCS 10$ ;NO. GO OPEN BY FILE NAME OFID$A #LOGFDB ;OPEN BY FID0 BCC ECRIT2 ;IT WORKED. SO GO WRITE THE RECORDC10$: OPEN$A #LOGFDB,#LUNLOG,#$LOGNM ;BY FILE NAME HERE (FOR APPEND)E* BCC 20$ ;IT WORKED. GO WRITE THE RECORD7 OPEN$W #LOGFDB,#LUNLOG,#$LOGNM ;TRY TO CREATE THE FILEC) BCS ECRITX ;ERROR. IGNORE THE RECORD. - MOV SP,FLGCLO ;DON'T CLOSE FILE AFTER WRITER2 MOV R3,-(SP) ;SAVE THE ACTUAL MESSAGE DESCRIPTOR/ MOV #CREMSG,R3 ;TELL USER IT WAS JUST CREATED CALL ECRIT2 ;AND GO WRITE IT.- MOV (SP)+,R3 ;RESTORE ACTUAL MSG DESCRIPTOR ,20$: MOV #LGFID$,R4 ;STILL USING ERRORS.LOG) CALL PUTFID ;SAVE THE FID IN SAVE AREAN% TST FLGCLO ;WAS FILE JUST CREATED?E+ BEQ ECRIT2 ;NO. GO WRITE OUT THE RECORD.O+ CMP R3,#CREMSG ;DUPLICATE CREATE MESSAGE?R/ BEQ ECRITC ;YES, SO IGNORE THE WRITE (CLOSE) / CLR FLGCLO ;AFTER NEXT WRITE, CLOSE THE FILE 6ECRIT2: GTIM$C BLOCK+8. ;GET TIME/DATE FOR TIME STAMP5 MOV BLOCK+14.,BLOCK ;CHANGE THE TIME/DATE STRUCTUREC7 MOV BLOCK+16.,BLOCK+2. ;CHANGE THE TIME/DATE STRUCTUREC7 MOV BLOCK+18.,BLOCK+4. ;CHANGE THE TIME/DATE STRUCTURER! MOV #1,BLOCK+6. ;ASSUME DAY > 9F$ CMP BLOCK+12.,#10. ;WAS IT REALLY? BGE 20$ ;YES. USE 1 SPACE INC BLOCK+6. ;NO. USE 2 SPACES20$:1 MOV (R3)+,BLOCK+14. ;GET LENGTH OF ASCII STRING + MOV R3,BLOCK+16. ;ADDRESS OF ASCII STRINGG# MOV #OUTB2,R0 ;OUTPUT BUFFER AREAL# MOV #FORMAT,R1 ;CONVERSION STRINGE MOV #ARGBLK,R2 ;ARGUMENT BLOCK) CALL $EDMSG ;CREATE THE OUTPUT MESSAGE; PUT$ #LOGFDB,#OUTB2,R1 ;WRITE OUT THE RECORD TO ERRORS.LOGV/ TST FLGCLO ;CLOSE THE FILE AFTER THIS WRITE?R, BNE ECRITX ;BR IF NO. RETURN IS IN ECRIT(ECRITC: CLOSE$ #LOGFDB ;CLOSE THE FILE*ECRITX: RETURN ;GO BACK WHENCE WE CAME. .PAGE .SBTTL PROCESS SWITCH FILES;GL; SWITCH FILES.. MEANS COPY CURRENT TO GIVEN AND CONTINUE LOGGING FROM GIVEN;U'; IF NOT LOGGING, ISSUE MSG AND GO AWAYT; SWI:' BITB #ES.LOG, $ERFLA ; ARE WE LOGGING?T BNE 10$ ; IF YES, OK -BR$ MOV #ACTER, R3 ; LOGGING NOT ACTIVE CALL TERER ; TYPE ON TERMINALO CALLR $RETRNT;F@; IF FILE IS OPEN, CLOSE IT. THEN MOVE IT TO TEMP. FDB , OPEN IT!10$: ; OK HERE - WE'RE LOGGINGS TST $FILOP ; IS THE FILE OPEN? BEQ 20$ ; BR IF CLOSED.C% CLOSE$ #$FDB ; ELSE, CLOSE LOG FILET& CLR $FILOP ; INDICATE FILE IS CLOSED;U%; MOVE FILE NAME FROM 00N6S"SYSCM TO TMPNAMM;V20$:$ MOV R4, -(SP) ; SAVE POINTER TO EMB MOV #$ERLOF, R4 ; LOG FILE ADDR MOV #TMPNAM, R5% BIS #F.SYS, $FLAG ; MOVE IS FROM SYS# CALL $GTFIL' MOV (SP)+, R4 ; RESTORE POINTER TO EMBT@ OPEN$R #TMPFDB,#TMPLUN ; OPEN THE OLD LOG FILE AS TEMP FOR READ BCC 30$ ; BR IF NO ERROR% MOV #OPEER, R3 ; FAILED TO OPEN FILET CALL TERER ; TERM MSGO CALLR $RETRN ; RETURNL"; ESTABLISH GIVEN FILE AS LOG FILE;G30$:& TST (R4)+ ; POINT PAST RESERVED WORD+ MOV #$FILNM, R5 ; OUTPUT BUFFER FOR GETFIL; :; FIRST MOVE IN DEFAULT NAME AND UPDATE W/ FIELDS FROM EMB;L MOV #LENSY, (R5) ; 5 MOV #DEFSY, 2(R5) ; SET UP THE DEFAULT LOG FILE NAME 6 MOV #LENUFD,4(R5) ; SO THAT IF FIELDS WERE OMITTED BY; MOV #DEFUFD, 6(R5) ; USER, THE DEFAULT WILL BE SUBSTITUTEDB MOV #LENNAM,10(R5) ;R MOV #DEFNAM, 12(R5) MOVB (R4)+,FILFLG ; GET FLAGS0 CALL $GTFIL ; GET THE USER SPECIFIED FILE NAME- FDRC$R #$FDB,,#$TMPBF,#$MAXLN ; INIT THE FDB . FDOP$R #$FDB,#LOGLUN,#$FILNM,,#FA.SHR,#FA.DLK% BITB #1,FILFLG ; /NV OR OLD VERSION?O;I); THEN OPEN FOR APPEND OR OPEN A NEW FILEB;L BNE 35$ ; BR FOR NEW VERSION OPEN$A #$FDB ; OPEN FOR APPEND BCC 40$ ; BR IF NO ERRORSR2 CMPB $FDB+F.ERR, #IE.NSF ; IS ERROR NO SUCH FILE? BNE 37$ ; BR IF NO35$:/ FDAT$R #$FDB,#R.VAR,#FD.BLK,,#5 ; INIT THE FDBV! OPEN$W #$FDB ; OPEN NEW VERSIONG BCC 40$ ; BR IF NO ERRORS ; -; ERROR .. CLOSE TEMP FILE AND RESTORE $FILNMT;F37$:, CLOSE$ #TMPFDB ; ERROR CLOSE THE TEMP FILE) MOV #$ERLOF, R4 ; RESTORE FILE NAME FROM  MOV #$FILNM, R5 ; SYSCM TO FDB BIS #F.SYS, $FLAG ; SYSTEM MOVE CALL $GTFIL MOV #OPEER, R3 CALL TERER ; REPORT OPEN ERROR CALLR $RETRN ; AND GO AWAY;C(; OK FILE WAS OPENED... SAVE ID AND NAME;L40$:* CALL $INITF ; SAVE FILE ID AND SET FILOP; F;IF FILE WAS SUCESSFULLY OPENED, DO THE COPY OPERATION, AND CLOSE AND B; DELETE IF NECESSARY THE TEMP FILE IN GETPUT.. FOR GETPUT, FILFLG ; HAS BEEN ESTABLISHED BY GETFIL;R* CALL GETPUT ; COPY ONE FILE TO THE OTHER;O CALLR $RETRN ; DONEV .PAGE .SBTTL PROCESS APPEND;#G; HERE FOR THE APPEND OPERATION - APPEND GIVEN FILE TO CURRENT LOG FILE;;P'; IF NOT LOGGING, ISSUE MSG AND GO AWAYW;APP:1 BITB #ES.LOG, $ERFLA ; ARE WE CURRENTLY LOGGING?C BNE 10$ ; BR IF SO( MOV #ACTER, R3 ; LOGGING MUST BE ACTIVE CALL TERER, CALLR $RETRNE;I'; LOGGING ON SO GET THE GIVEN FILE NAME 10$:. MOV #TMPNAM, R5 ; GET FDB ADDR FOR GIVEN FILE MOV #LENSY, (R5) ; 5 MOV #DEFSY, 2(R5) ; SET UP THE DEFAULT LOG FILE NAME6 MOV #LENUFD,4(R5) ; SO THAT IF FIELDS WERE OMITTED BY; MOV #DEFUFD, 6(R5) ; USER, THE DEFAULT WILL BE SUBSTITUTEDR MOV #LENNAM,10(R5) ;F MOV #DEFNAM, 12(R5)' TST (R4)+ ; SKIP RESERVED WORD IN EMB$ MOVB (R4)+,FILFLG ; GET FLAGS) CALL $GTFIL ; GET THE FILENAME FROM EMB ;G%; OPEN THE GIVEN FILE ON A TEMP BASISR;E' OPEN$R #TMPFDB,#TMPLUN ; OPEN THE FILEI BCC 20$ ; BR IF NO ERRORS $ MOV #OPEER,R3 ; FAILED TO OPEN FILE CALL TERER CALLR $RETRN,;R-; NO ERRORS HERE SO OPEN THE CURRENT LOG FILEE;D<; OPEN AN EXISTING LOG FILE. .. CHECK TO SEE IF ALREADY OPEN5; TRY TO OPEN BY ID FOR APPEND.. IF FAIL, TRY BY NAMEM;(20$: TST $FILOP ; ALREADY OPEN? BNE 30$ ; BR IF YESO- FDRC$R #$FDB,,#$TMPBF,#$MAXLN ; INIT THE FDBL. FDOP$R #$FDB,#LOGLUN,#$FILNM,,#FA.SHR,#FA.DLK;T1; MOVE THE FILE ID AND SEQUENCE NUMBER FROM SYSCM,;P- CALL MOVFID ; MOVE THE FILE ID, SEQ. NUMBERR% BCS 22$ ; IF CARRY SET, TRY BY NAMEE( OFID$A #$FDB, #LOGLUN ; OPEN BY FILE ID BCC 25$ ; BR IF NO ERRORST;G); MOVE LOG FILE NAME FROM SYSCM TO FILNAM ;C$22$: MOV #$ERLOF, R4 ; LOG FILE ADDR MOV #$FILNM, R5 ; DESTINATION BIS #F.SYS, $FLAG ; SYSTEM MOVE CALL $GTFIL ; MOVE! OPEN$A #$FDB ; TRY OPEN BY NAME# BCC 25$ ; BR IF NO ERRORSL, CLOSE$ #TMPFDB ; IF ERROR, CLOSE TEMP FILE MOV #OPEER, R3E CALL TERER ; REPORT OPEN ERROR CALLR $RETRN ; GO AWAY;O25$: INC $FILOP ; FILE OPEN30$:+ CALL GETPUT ; IF OPENED, DO THE APPENDING, CALLR $RETRN  .PAGE' .SBTTL COPY FROM TEMP FILE 00N>TADATADATADATADATADATADATADATADATATO LOG FILEO;LL; DOES GET FROM TEMP FILE AND PUT TO LOG FILE. DESTROYS R4 AND IF ERROR R3.G; REQUIRES NO INPUT, OUTPUT IS A COPIED FILE. IF SUCCEEDS, DELETES TEMPGI; FILE ACCORDING TO WISHES OF USER. NOTE, IF THE FILE IS TO BE DELETED, IRM; DO NOT CLOSE IT, AS IF I DID, I WOULD HAVE TO SPECIFY VERSION NUMBER TO DEL ;RGETPUT:N) MOV #$TMPBF,R4 ; TEMP BUFFER FOR RECORDS10$: GET$S #TMPFDB ; GET THE RECORD BCS 20$ ; IF ERROR, BRANCH, PUT$S #$FDB,,TMPFDB+F.NRBD ; PUT THE RECORD BCS 30$ ; IF ERROR, BRANCH$ BR 10$ ; LOOP FOR NEXT IF NO ERROR;F; ERROR ON A GET; C20$: CMPB TMPFDB+F.ERR,#IE.EOF ; GET ERROR... CHECK FOR END OF FILED BEQ 40$ ; BR IF EOFE;C6; HERE FOR AN ERROR ON PUT OR GET ERROR OTHER THAN EOF;D&30$: CLOSE$ #TMPFDB ; CLOSE TEMP FILE" MOV #GPER, R3 ; GET/PUT ERROR MSG CALL TERER ; ...AND OUTPUT ITP BR 60$ ; GET OUT NOW;O%; REACHED EOF. SO CLOSE (DELETE) FILEE;D)40$: BITB #2,FILFLG ; SHOULD DELETE FILE?F BEQ 50$ ; BR IF NO2 DELET$ #TMPFDB ; DELETE IT (WHICH CLOSES IT TOO) BR 60$ ; GET OUT NOW;R); CLOSE THE TEMP FILE WITHOUT DELETING ITB;E+50$: CLOSE$ #TMPFDB ; NO DELETE.. CLOSE ITL 60$: RETURN ; RETURN TO CALLER .PAGE .SBTTL PROCESS BACKUP FILE NAME;H; BACKUP FILE NAME GIVEN;DD; MOVE CURRENT INTO $EMB OF SAME FORM OF EMB (/NV/DE DOESN'T MATTER)G; AND POINT TO IN W/ R4. THIS DETERMINES THE DEFAULT IF USER OMITS PART ; OF FILE SPEC.DD; R3 AND R5 DESTROYED. R4 POINTS IN DATA SUBPACKET AT RESERVED WORD.;TBAC:' MOV R4, R3 ; SAVE POINTER TO SUBPACKETB;0; SET UP BUFF FROM SYSCM; " MOV #$ERBAF, R4 ; INPUT TO GETFIL6 MOV #EDTOUT, R5 ; OUTPUT FROM GETFIL. NO NEED TO INIT+ ; TO DEFAULT CAUSE SYSCM HAS WHOLE SPECR BIS #F.SYS, $FLAG ; SYSTEM MOVE CALL $GTFIL+ MOV R3, R4 ; RESTORE POINTER TO REQUESTEDR& TST (R4)+ ; POINT PAST RESERVED WORD TSTB (R4)+ ; ...AND FLAGSM/ MOV #EDTOUT, R5 ; WANT BUFFER UPDATED FROM EMBP CALL $GTFIL ; ;T@; NOW PARSE THE FILENAME SINCE CSI2 DIDN'T CHECK IT FOR VALIDITY;R" MOV #TMPFDB,R0 ; POINT TO THE FDB& MOV #TMPFDB+F.FNB,R1 ; ...AND ITS FNB% MOV #EDTOUT,R2 ; POINT TO DESCRIPTORO CLR R3 ; NO DFNB& CALL .PARSE ; NOW PARSE THE FILENAME BCC 5$ ; IF O.K. - GO ON' MOV #BAKER,R3 ; POINT TO ERROR MESSAGEL CALL TERER ; ...AND OUTPUT ITP BR 10$ ; NOW RETURNT5$: ; REF. LABELT. MOV #EDTOUT, R4 ; POINT TO OUTPUT FROM GETFIL, MOV #$ERBAF, R5 ; NEXT DESTINATION IS SYSCM BIS #F.SYS, $FLAG ; SYSTEM MOVE. CALL $GTFL2 ; UPDATE SYSTEM BACKUP FILE NAME10$: CALLR $RETRNF .PAGE .SBTTL PROCESS CHANGE OF LIMITS;R.; CHANGE HARD AND SOFT ERROR LIMITS IN THE UCB;R$; INPUT: R4 POINTS AT DATA SUBPACKET; :; SAVE FIRST TWO WORDS (HARLIM|CODE),(SOFLIM|CODE) IN BUFF<; SET UP COUNTER OF HOW MANY DEVICES, GET UCB AND IN SYSTEM; STATE MAKE THE CHANGES;TCHA:- MOV DATSIZ, R3 ; NO. BYTES IN CHA LIM SUBPACU BLE 90$ ; MESSED UP SUBPACKET55$:X MOV #$BUFF, R5 ; TEMP BUFF ADDR# MOV (R4)+, (R5) ; HARDLIM AND CODE % MOV (R4)+, 2(R5) ; SOFT LIM AND CODE10$: MOV (R4)+, R2 ; DEV MNEMONICS CLR R1 ; LOAD THER BISB (R4)+, R1 ; ...UNIT NUMBER TSTB (R4)+ ; POINT TO NEXT DEV3 CALL GETUCB ; GET THE UCB ADDR FOR STUFF IN R1&R2A& BCC 20$ ; BR IF ERROR LOGGING DEVICE MOV R3, -(SP) ; SAVE COUNTER ( MOV #ELDER, R3 ; POINT TO ERROR MESSAGE BR 22$ ; ...AND PRINT IT20$: TST R0 ; DID WE GET UCB? BNE 25$ ; BR IF YES MOV R3, -(SP) ; SAVE COUNTER,( MOV #UCBER, R3 ; POINT TO ERROR MESSAGE,22$: MOV #EDTOUT,R0 ; POINT TO OUTPUT BUFFER) MOV R2,$BUFF ; STORE THE DEVICE MNEMONICO? MOV #$BUFF+2,R2 ; POINT TO THE BEGINNING OF THE ARGUMENT BLOCKT/ MOV #$BUFF,(R2) ; POINT TO THE STORED MNEMONIC ( MOV R1,2(R2) ; PUT THE UNIT NUMBER HERE& MOV R3,R1 ; COPY THE MESSAGE POINTER& CALL $EDMSG ; ...AND FORMAT THE LINE# MOV #EDTOUT,R3 ; POINT TO THE LINE. CALL TERER ; ...AND OUTPUT ITD MOV (SP)+, R3 ; RESTORE COUNTER BR 80$V;-; NOW UPDATE THE LIMITSV;C)25$: CALL $SWSTK,80$ ; GO TO SYSTEM STATE# .IF DF R$$MPL .IFTU* CALL $MUCB2 ;; P00NFS"ROCESS THIS IN APR5 LAND .IFFM TSTB (R5)+ ; HARD LIM CHANGE?N BEQ 28$ ;; BR IF NOC' MOVB (R5), U.ERHL(R0) ;; MOVE HARD LIMD BR 30$ ;; JOIN COMMON CODE/28$: MOVB U.ERHL(R0),(R5) ;; NOTE CURRENT VALUES30$:% TSTB (R5)+ ; POINT AT SOFT LIM FLAG TSTB (R5)+ ;; SOFT LIM CHANGE? BEQ 40$ ;; BRANCH IF NO.' MOVB (R5), U.ERSL(R0) ;; MOVE SOFT LIMC BR 70$ ;; JOIN COMMON CODE/40$: MOVB U.ERSL(R0),(R5) ;; NOTE CURRENT VALUE  .ENDC ; R$$MPL)70$: RETURN ;; RETURN FROM SYSTEM STATEO80$:* SUB #10, R3 ; SUB. NO. BYTES/LIMIT CHANGE2 CMP R3, #10 ; ARE THERE ENOUGH BYTES IN SUBPACKET ; FOR ANOTHER LIMIT CHANGE? BGE 5$ ; LOOP IF YES90$: CALLR $RETRN ; FINISH UP .PAGE .SBTTL OPEN A LOG FILET;RE; OPENS FILE IN $FDB ACCORDING TO FILFLG BIT 0 - 1=NV, 0=OLD VERSION.4C; FIRST CHECKS IF FILE IS ALREADY OPEN. IF NOT, TEST TO SEE IF WANT06; OLD OR NEW VERSION. TRYS THE RESPECTIVE OPEN COMMAND;UOPEN::! TST $FILOP ; FILE ALREADY OPEN?T: BEQ 5$ ;IF NOT BR TO TEST FURTHER' CLOSE$ ;IF OPEN THEN CLOSE ITA6 5$: FDOP$R #$FDB,#LOGLUN,#$FILNM,,#FA.SHR,#FA.DLK% BITB #1,FILFLG ; /NV OR OLD VERSION?0 BNE 10$ ; BR FOR NEW VERSION OPEN$A #$FDB ; OPEN FOR APPEND BCC 12$ ; BR IF NO ERROR2 CMPB #IE.NSF, $FDB+F.ERR ; IS ERROR NO SUCH FILE?+ BEQ 10$ ; IF SO, TRY OPEN NEW VERSION- BRE6 CALL $OPNER ; TRY BACKUP FILE..TYPING ERROR MSGS ETC BR 20$ ; RETURN TO CALLER:;T$; NO SUCH FILE OR WANTED NEW VERSION; 310$: FDAT$R #$FDB,#R.VAR,#FD.BLK,,#5 ; INIT THE FDB ( OPEN$W #$FDB ; OPEN NEW FILE FOR WRITE BCS 15$ ; BR IF ERRORU-12$: CALL $INITF ; IF NO ERRORS, INIT SYSCMN BR 20$ ; ...AND RETURN#15$: CALL $OPNER ; TRY BACKUP FILED 20$: RETURN  .PAGE6 .SBTTL CONVERT FILE NAME STRING TO DATASET DESCRIPTOR;EI; ***********************************************************************NI; WARNING: $GTFIL AND $GTFL2 REMAP APR6 AND THEREFORE MUST RESIDE IN APR5I; ***********************************************************************B:; INPUT: R4 POINTS AT FILESIZE BYTE. FOLLOWING THIS IS THE; COMPLETE FILE SPEC ;OK; OUTPUT: R5 POINTS AT BUFFER CONTAINING THE DEFAULT FOR THE 3 PARTS OF THE5; FILE SPEC OF FORM LENGTH WORD, ADDR WORD.. 3 TIMESA); ALL REGISTERS PRESERVED EXCEPT R4 & R5A6; IF F.SYS IN $FLAG IS SET, R4 IS ASSUMED TO POINT AT,; NAME IN SYSCM AND SYSTEM STATE IS ENTERED;:E; PARSES R4 AND PUTS GIVEN COMPONENT PARTS OF FILESPEC INTO R5 BUFFER*;*$GTFIL::) BIT #F.SYS, $FLAG ; SYSTEM STATE NEEDED?* BEQ 5$ ; BR IF NOR, BIC #F.SYS, $FLAG ; CLEAR BIT FOR NEXT TIME; CALL .MVBF1 ;MOVE NAME BUFFERP/ MOV #$BUFF, R4 ; SET UP POINTER FOR USER STATER5$:P MOV R3, -(SP) MOV R0, -(SP) ; SAVE REGISTERSD# MOVB (R4)+, R3 ; FILE SIZE FOR CSIP* CSI$1 #CSIBLK,R4,R3 ; FIRST PART OF PARSE;I CSI$2 #CSIBLK,OUTPUT ; PARSET; . MOV #CSIBLK, R0 ; POINT TO BEGIN OF CSI BLOCK) BITB #CS.DVF, C.STAT(R0) ;DEV SPECIFIED?O BEQ 10$ ; BR IF NO$ INCB C.DEVD(R0) ; ACCOUNT FOR COLON" MOVB C.DEVD(R0), (R5)+ ; MOV SIZE7 CLRB (R5)+ ; CLR NEXT BYTE AND POINT TO WORD FOR ADDR$ MOV C.DEVD+2(R0), (R5)+ ; MOVE ADDR BR 15$ ; BR TO UFD10$:, CMP (R5)+, (R5)+ ; SKIP TWO WORDS IF NO DEV$15$: BITB #CS.DIF, C.STAT(R0) ; UFD? BEQ 20$ ; BR IN NO" MOVB C.DIRD(R0), (R5)+; MOVE SIZE CLRB (R5)+ ; CLR NEXT BYTE$ MOV C.DIRD+2(R0), (R5)+ ; MOVE ADDR BR 30$ ; GO DO FILENAMEF20$:, CMP (R5)+, (R5)+ ; SKIP TWO WORDS IF NO UFD30$:! BITB #CS.NMF, C.STAT(R0) ; NAME?) BEQ 40$ ; BR IF NO/ MOVB C.FILD(R0), (R5)+ ; MOV SIZE OF FILE NAME;% CLRB (R5)+ ; CLR AND SKIP NEXT BYTED$ MOV C.FILD+2(R0), (R5)+ ; NAME ADDR BR 50$ ; BRANCHO40$: CMP (R5)+,(R5)+&50$: MOV (SP)+, R0 ; RESTORE REGISTERS MOV (SP)+, R3 RETURN  .PAGE6 .SBTTL CONVERT DATASET DESCRIPTOR TO FILE NAME STRING;RN; R4 POINTS AT FILENAME BUFFER OF 6 WORDS - LENGTH OF DEV, ADDRESS OF DEV, ...6; R5 POINTS AT DESTINATION BUFFER, SIZE BYTE AND ASCII@; THE BUFFER WILL BE FILLED WITH THE CONVERTED FILE SPEC FROM R4H; IF #F.SYS, $FLAG IS SE00NNTTADATADATADATADATADATADATADATADATAT, SYS. STATE IS NEEDED (WE'RE WRITING TO SYSCM); R1, R2, R3 DESTROYEDC;L$GTFL2::" BIT #F.SYS, $FLAG ; SYSTEM STATE? BEQ 5$ ; BR IF NO5) MOV R5, -(SP) ; SAVE SYSCM ADDR ON STACK6 MOV #$BUFF, R5 ; REPLACE R5 WITH INTERNAL BUFFER ADDR5$:C MOV #3, R3 ; COUNTER! MOV R5, -(SP) ; SAVE DESTINATIONF CLR R2 ; COUNT TOTAL SIZE,0 INC R5 ; SKIP FOR NOW SIZE BYTE IN DESTINATION10$:# TST (R4) ; NONZERO SIZE FOR SPEC?L BEQ 20$ ; BR IF ZERO SIZED% MOV (R4)+, R1 ; MOVE SIZE TO COUNTERI! ADD R1, R2 ; UPDATE TOTAL COUNTW MOV R4, -(SP) ; SAVE POINTERR MOV (R4), R4 ; POINT AT STRING#15$:" MOVB (R4)+, (R5)+ ; MOVE ASCII IN SOB R1, 15$ ; BR FOR MOREV* MOV (SP)+, R4 ; RESTORE POINTER TO BUFFER, CMPB (R4)+, (R4)+ ; POINT TO NEXT SIZE WORD" BR 30$ ; SKIP PART FOR ZERO SIZE20$:. CMP (R4)+, (R4)+ ; SKIP ZERO SIZE AND ADDRESS30$:- SOB R3, 10$ ; LOOP FOR 3 PARTS OF FILE NAMET4 MOV (SP)+, R5 ; RESTORE POINTER TO OUTPUT SIZE BYTE MOVB R2, (R5) ; MOVE IN SIZEV' BIT #F.SYS, $FLAG ; DID WE NEED SWSTK?  BEQ 40$ ; BR IF NO* BIC #F.SYS, $FLAG ; CLR BIT FOR NEXT TIME( MOV (SP)+, R5 ; RESTORE THE SYSTEM ADDR CALL .MVBF2 ;MOVE NAME BUFFERF40$:3 RETURN ;; FROM SYS (IF NECESSARY) AND SUBROUTINE  .END4)+ ; POINT TO NEXT SIZE WORD" BR 30$ ; SKIP PART FOR ZERO SIZE20$:. CMP (R4)+, (R4)+ ; SKIP ZERO SIZE AND ADDRESS30$:- SOB R3, 10$ ; LOOP FOR 3 PARTS OF FILE NAMET4 MOV (SP)+, R5 ; RESTORE POINTER TO OUTPUT SIZE BYTE MOVB R2, (R5) ; MOVE IN SIZEV' BIT #F.SYS, $FLAG ;C .TITLE ERRRSB - ERRLOG ROUTINES WHICH MUST BE MAPPED THROUGH APR5  .IDENT /V01.00/;;;R; COPYRIGHT (C) 1985 BYV); DIGITAL EQUIPMENT CORPORATION, MAYNARDF(; MASSACHUSSETTS. ALL RIGHTS RESERVED.;G5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY;5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE 5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE 5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERT5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISEE5; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO 5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.;C5; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T;T; MODULE: ERRRSB.MAC;N;; AUTHOR: B. S. MCCARTHY (MOVED FROM J. MELVINS .COR FILES)E;P; DATE: SEPTEMBER 1984; ;W; MODIFIED BY:;  .PAGE' .SBTTL GETFID FROM SECONDARY POOL AREAIH;=======================================================================G;THIS ROUTINE RETRIEVES A SELECTED FID FROM SECONDARY POOL. A FLAG IS O0;SET IF THE DESIRED FID HAS NOT BEEN SET UP. H;=======================================================================&GETFID::CALL $SWSTK, 20$ ;SYSTEM STATE .IF DF R$$MPL" MOV $ERRX, KISAR6 ;MAP TO FILE ID BEQ 5$ ;BR IF NOT THERES .ENDC ;DF R$$MPLM( TST $LGFID(R4) ;;FILE ID SAVED ALREADY? BNE 10$ ;;BR IF YESO5$: MOV @$HEADR, R3 ;;SET USER INCB 6(R3) ;;CARRY BR 20$ ;;BACK TO USER STATE=+; HERE, WE HAVE A FILE ID SO MOVE IT TO FNBD,10$: MOV #$LGFID, R0 ;;SYSCM ADDR OF FILE ID ADD R4,R0 ;;OFFSET IT PROPERLY CMP R4,#LGFID$ ;;ERRORS.LOG?= BNE 13$ ;;BR IF NO.=, MOV #LOGFDB+F.FNB+N.FID, R1 ;;PROGRAM'S FNB BR 15$ ;;SKIP THE ELSE BLOCK013$: MOV #ACCFDB+F.FNB+N.FID, R1 ;;PROGRAM'S FNB15$: MOV (R0)+, (R1)+ ;;MOVE IT; MOV (R0)+, (R1)+ ;;MOVE IT  MOV (R0) , (R1)&20$: RETURN ;;BACK FROM SYSTEM STATE ;...AND THE SUBROUTINE .PAGE% .SBTTL PUTFID IN SECONDARY POOL AREAH;=======================================================================G;THIS ROUTINE PLACES A SELECTED FID IN SECONDARY POOL FOR LATER USE IN R;OPENING A FILE. RH;=======================================================================PUTFID:: CALL $SWSTK, 10$ ;SYSTEM STATE; .IF DF R$$MPL00YZ^" MOV $ERRX, KISAR6 ;;REMAP APR6V BEQ 10$ ;;BR IF NO MAPPING .ENDC ;DF R$$MPLT/ MOV #$LGFID, R0 ;;SAVE FILE ID AND DEVICE INFOR ADD R4,R0 ;;OFFSET IT PROPERLY CMP R4,#LGFID$ ;;ERRORS.LOG?= BNE 3$ ;;BR IF NO., MOV #LOGFDB+F.FNB+N.FID, R1 ;;PROGRAM'S FNB BR 5$ ;;SKIP THE ELSE BLOCK /3$: MOV #ACCFDB+F.FNB+N.FID, R1 ;;PROGRAM'S FNBG5$: MOV (R1)+ , (R0)+= MOV (R1)+, (R0)+= MOV (R1) , (R0)"10$: RETURN ;;BACK TO USER STATE ; ... AND THE SUBROUTINE .END; .IF DF R$$MPL? .TITLE ERRRDT - ERRLOG DATA WHICH MUST BE MAPPED THROUGH APR5U .IDENT /V01.00/;L;I; COPYRIGHT (C) 1985 BY/); DIGITAL EQUIPMENT CORPORATION, MAYNARDN(; MASSACHUSSETTS. ALL RIGHTS RESERVED.;C5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY,5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THEF5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE.5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERC5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISEN5; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TO 5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.;C5; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T;C; MODULE: ERRRDT.MAC;N;; AUTHOR: B. S. MCCARTHY (MOVED FROM J. MELVINS .COR FILES)E;P; DATE: SEPTEMBER 1984; ;W; MODIFIED BY:; # .MCALL FDBDF$,FDAT$A,FDOP$A,FDRC$A.LOGFDB:: FDBDF$I FDAT$A R.VAR,FD.CR $ FDOP$A LUNLOG,$LOGNM,,FA.SHR,FA.DLKACCFDB:: FDBDF$T FDAT$A R.FIX,,512.,2. FDRC$A FD.RAN,,512.$ FDOP$A ACCLUN,$ACCNM,,FA.SHR,FA.DLK/$LOGNM::.WORD LENLB,DEFLB ;DSPT FOR ERRORS.LOGI .WORD LENUIC,DEFUIC .WORD LENLOG,DEFLOG/$ACCNM::.WORD LENLB,DEFLB ;DSPT FOR ERRORS.LOGU .WORD LENUIC,DEFUIC  .WORD LENACC,DEFACCDEFLB: .ASCII /LB0:/ LENLB = .-DEFLBDEFUIC: .ASCII /[1,6]/ LENUIC = .-DEFUIC6DEFLOG::.ASCII /ERRORS.LOG;0/ ;VERSION MUST BE ;0 !!! LENLOG == .-DEFLOG,DEFACC: .ASCII /ERRORS.ACC/F LENACC = .-DEFACC .EVEN .END$A R.FIX,,512.,2. FDRC$A FD.RAN,,512.$ FDOP$A ACCLUN,$ACCNM,,FA.SHR,FA.DLK/$LOGNM::.WORD LENLB,DEFLB ;DSPT FOR ERRORS.LOGI .WORD LENUIC,DEFUIC .WORD LENLOG,DEFLOG/$ACCNM::.WORD LENLB,DEFLB ;DSPT FOR ERRORS.LOGU .WORD LENUIC,DEFUIC  .WORD LENACC,DEFACCDEFLB: .ASCII /L3 .TITLE ERRSHN - DISPLAY SPECIAL ERROR FILE FORMATS .IDENT /V01.01/;O; COPYRIGHT (C) 1985 BYI); DIGITAL EQUIPMENT CORPORATION, MAYNARDK(; MASSACHUSSETTS. ALL RIGHTS RESERVED.;E5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY 5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE=5; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE=5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHERE5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE=5; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TOL5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.; 5; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T9; VERSION: V01.01 INITIAL RELEASE FOR RSX-11M-PLUS V3.0=; MICRO/RSX V3.0E;P;O; MODIFIED BY:; ; J. MELVIN 20-NOV-84 V01.00T; INITIAL VERSION OF FILE;E; J. MELVIN 03-JAN-85 V01.01T3; JJM103 FIX FORMATING PROBLEMS / REMOVE I; FROM FILE OUTPUTO;  .PAGE3 .SBTTL DATA FOR SPECIAL FILE FORMATS FOR MICRO RSX# .MCALL FCSMC$,QIOW$C,OFID$R,QIOW$ST .MCALL GET$R,PUT$R  FCSMC$T TILUN = 5 ;TERMINAL I/OM LUNLOG = 10. ;ERRORS.LOG LUNBLANK: .ASCII / /E .EVEN3DEVCNT: .WORD 0 ;NUMBER OF DEVICES ON COMMAND LINE 4TOTITM: .WORD 0 ;TOTA00aTTADATADATADATADATADATADATADATADATAL NUMBER OF DEVICES TO DISPLAY1SYSTAB::.BLKW MAX.DV ;INDEX OF DEVICE TO DISPLAYN8DPNTR: .WORD SYSTAB ;ADDRESS OF CURRENT ENTRY IN SYSTABTEMTOT: .WORD 0 ;WORK CELLE2DOIT: .WORD 0 ;NUMBER OF DEVICES FOR A GIVEN LINETEMP: .WORD 0 ;WORK CELLO6SAVEMB::.WORD 0 ;ADDRESS OF USER SUPPLIED DEVICE LIST,UNIT: .WORD 0 ;CURRENT DEVICE'S UNIT NUMBER0USRSPC: .WORD 0 ;1 -> USER SUPPLIED DEVICE LISTARGBLK: .BLKW 26. OUTBUF: .BLKW 45.W7BANNER: .ASCII /%VA System %12S%VSCounts last zeroed / / .ASCIZ / %3Z%VS%Y/ ;VARIABLE SEPARATOR SPACEB6BANER2: .ASCII /Error Counts%20SCounts last updated /. .ASCIZ / %3Z%VS%Y/ ;VARIABLE SEPARATOR SPACEDEVLIN: .ASCIZ / %2A%O: /CLSTFMT: .ASCIZ /Memory Parity: %M%15S Unknown Interrupts: %M/K3NODEV: .ASCIZ / %R -- %2A%O: is not in the system./VBBADDEV: .ASCII / %R -- %2A%O: is not an error logging device / ;1" .ASCIZ /or is offline./ ;2BAMSG: .ASCII / *** SHOW ERROR command was aborted. / ;1; .ASCII / This output file was terminated prematurely./ ;2R AMSGL=.-AMSG .EVENDOTAB: .WORD MSGSI,BLOCK+AL.SI .WORD MSGRIO,BLOCK+AL.RIO .WORD MSGUIO,BLOCK+AL.UIO .WORD MSGHTO,BLOCK+AL.HTO .WORD MSGSTO,BLOCK+AL.STO .WORD MSGBR,BLOCK+AL.BR .WORD 0,0CURTXT: .ASCII /Current/LENCUR=.-CURTXT2HISTXT: .ASCII /Historical/LENHIS=.-HISTXT  .EVEN;:&;HEADERS TO OUTPUT ON THE /BIN DISPLAY;I'MSGUIO: .ASCII -Unrecovered I/O Error -C'MSGRIO: .ASCII -Recovered I/O Error - &MSGSI: .ASCII -Spurious Interrupt -'MSGHTO: .ASCII -Hard Timeout Error -='MSGSTO: .ASCII -Soft Timeout Error -A'MSGBR: .ASCII -Block Replacement -M .EVEN$SAVCON: .BLKW 1 ;CONTEXT SAVE AREA SHOWV2:: L2 BIT #EL.SEF,$EFMSK ;SPECIAL FILE FORMAT ENABLED? BNE SHOTIM ;YES.n RETURN ;JUST RETURN FOR NOWCSHOTIM:o# MOV R4,SAVEMB ;SAVE DATA PKT ADDR$ BIT #FILOUT,FLAG1 ;OUTPUT TO FILE?% BNE SHOWL1 ;YES. ITS OPEN ALREADYr* QIOW$C IO.ATT,TILUN,2 ;GET EXCLUSIVE USE+SHOWL1: BIT #NEWBIT,FLAG1 ;BINARY OR ASCII% BEQ SHOBIN ;BINARY, SO JUMP TO IT.= .PAGE# .SBTTL DISPLAY THE ASCII TEXT FILESL;===========================================================================@;DISPLAY ERRORS.LOG ON THE USER'S TERMINAL (OPTIONALLY ON A USERG;SPECIFIED FILE. THIS ROUTINE OPENS THE ERRORS.LOG FILE AND READS EACHMG;RECORD THEREIN. AFTER EACH RECORD IS INPUT, IT IS WRITTEN TO THE USERF>;SELECTED OUTPUT AREA (EITHER THE TERMINAL OR AN OUTPUT FILE).L;===========================================================================SHOASC: ;; );OPEN THE ERRORS.LOG FILE FOR PROCESSING.S; ! MOV #LGFID$,R4 ;ERRORS.LOG FILE= CALL GETFID ;GET FID IF THERE BCS 10$ ;BR IF NONE THERE.R) OFID$R #LOGFDB,#LUNLOG ;OPEN BY FILE IDO BCC 30$ ;IT WORKED!310$: MOV #OPNLOG,R3 ;ASSUME OPEN ERROR WILL HAPPENE. OPEN$R #LOGFDB,#LUNLOG,#$LOGNM ;OPEN BY NAME. BCC 20$ ;IT WORKED.) MOV #LFMERR,R3 ;ERRORS.LOG FILE MISSINGE! JMP ERROR ;PRINT ERROR MESSAGE=%20$: MOV #LGFID$,R4 ;ERRORS.LOG FILE= CALL PUTFID ;STORE FID AWAY#30$: MOV #BLANK,R0 ;BUFFER ADDRESSG MOV #1,R1 ;BUFFER SIZE CALL OUTPUT ;WRITE OUTG.GETIT: GET$ #LOGFDB,#OUTBUF,#90. ;GET A RECORD$ BCS CHKEOF ;ERROR. CHECK FOR EOF- MOV LOGFDB+F.NRBD,R1 ;GET ACTUAL RECORD SIZEW MOV #OUTBUF,R0 ;BUFFER ADDRESS CALL OUTPUT ;WRITE OUT BR GETIT ;KEEP GOING$;NA;AN ERROR OCCURRED WHILE READING. A CHECK MUST BE MADE TO SEE IFLC;IT WAS AN END-OF-FILE OR NOT. IF AN END-OF-FILE WERE ENCOUNTERED,$D;THE APPROPRIATE FILES ARE CLOSED. IF SOME OTHER ERROR OCCURRED, AN0;ERROR MESSAGE RELATING TO THAT ERROR IS OUTPUT.;C2CHKEOF: MOV #RDERR,R3 ;ASSUME READ ERROR HAPPENED. CMPB #IE.EOF,LOGFDB+F.ERR ;WAS IT REALLY EOF? BNE SHOWX1 ;BR IF NO.%SHOWX: MOV #BLANK,R0 ;BUFFER ADDRESS# MOV #1,R1 ;BUFFER LENGTHC CALL OUTPUT ;WRITE OUTB! CLR R3 ;SHOW NO ERROR OCCURREDO' BIT #FILOUT,FLAG1 ;OUTPUTING TO FILE?E BEQ SHOWX1 ;BR IF NO $ CLOSE$ #USRFDB ;CLOSE OUTPUT FILE BR SHOWXX ;SKIP DETACH OF TI:/SHOWX1: QIOW$C IO.DET,TILUN,1 ;DETACH T00iZ^"ERMINALU.SHOWXX: CLOSE$ #LOGFDB ;CLOSE THE INPUT FILE TST R3 ;ERROR ADDRESS GIVEN?R BEQ SHOWXT ;NO SO JUST RETURN) JMP ERROR ;GO PRINT ERROR MESSAGE ETC.O!SHOWXT: RETURN ;WHENCE WE CAME: .PAGE" .SBTTL DISPLAY BINARY INFORMATIONSHOBIN::J;=========================================================================G;THIS ROUTINE DISPLAYS THE ERRORS.ACC INFORMATION ON THE USER SPECIFIED K;OUTPUT AREA (EITHER THE TERMINAL OR A USER SPECIFIED FILE). THIS REQUIRESC<;THAT THE BINARY DATA IN THE ERRORS.ACC FILE BE FORMATTED. J;=========================================================================; H;THIS BLOCK OF CODE GENERATES A LIST OF INDICES INTO THE ERRORS.ACC FILEI;FOR EACH DEVICE THAT MUST BE DISPLAYED. THE USER CAN OPTIONALLY SPECIFY=E;A LIST OF DEVICES TO PROCESS, IN WHICH CASE ONLY THE INFORMATION FORIF;THOSE DEVICES ARE OUTPUT. IF NO SUCH LIST IS SPECIFIED, THEN ALL THEH;DEVICES THAT ARE POSSIBLE ON THE MICRO -AND- ARE DEFINED IN THE SYSTEMD;ARE DISPLAYED. THE LIST OF INDICES GENERATED WILL BE USED LATER TO2;ACTUALLY DISPLAY THE REQUIRED DEVICE INFORMATION.;=" MOV SAVEMB,R0 ;GET DATA PKT ADDR TST (R0) ;WAS THERE ONE?E BEQ LAB1 ;BR IF NOI$ INC USRSPC ;SHO USER HAS DEV LIST;EA;SCAN THE LIST AND PRINT ERROR FOR EACH DEVICE NOT IN THE SYSTEM.,; # MOV SAVEMB,R4 ;POINT TO USER LIST) MOV (R4)+,DEVCNT ;GET NUMBER OF DEVICES -NXTTRY: MOV R4,DEVICE ;SAVE ADDR TO MNEMONICO' MOV (R4)+,R2 ;PUT MENMONIC FOR GETUCB ) MOVB (R4),DVUNIT ;SAVE UNIT FOR ERR MSGD$ MOVB (R4)+,R1 ;PUT UNIT FOR GETUCB TSTB (R4)+ ;SKIP THE FILLER) CALL GETUCB ;LOCATE THE UCB FOR DEVICET, BCS NOELD ;BR IF NOT ERROR LOGGING DEVICE TST R0 ;UCB ADDR RETURNED?R BNE NXTUSR ;BR IF UCB FOUND0 MOV #NODEV,R1 ;NO SUCH DEVICE IN SYSTEM FORMAT$ BR COMMON ;JOIN COMMON ERROR CODE3NOELD: MOV #BADDEV,R1 ;NOT ERROR LOG DEVICE FORMATR&COMMON: MOV #OUTBUF,R0 ;OUTPUT BUFFER MOV #ARGBLK,R2 ;ARGUMENT BLOCK MOV TASK,ARGBLK ;TASK NAME" MOV DEVICE,ARGBLK+2 ;DEVICE NAME" MOV DVUNIT,ARGBLK+4 ;UNIT NUMBER! CALL $EDMSG ;CREATE ASCII TEXTI# MOV #OUTBUF,R0 ;BUFFER TO DISPLAYF CALL WRITTI ;SO DISPLAY IT +NXTUSR: DEC DEVCNT ;ONE LESS DEVICE TO DO $ BGT NXTTRY ;DO FOR EACH SPECIFIED( MOV SAVEMB,R0 ;GET THE INITIAL POINTER*LAB1: CLR NOPNT ;INSURE TABLE TERMINATES# MOV #DEVPNT,R3 ;PROCESS DEV TABLER" MOV #SYSTAB,R5 ;OFFSET LIST ADDR% CLR TOTITM ;TOTAL ITEMS TO PROCESSK'NXTDEV: MOV (R3),R2 ;GET DEV MNEMONICT BEQ DONE ;0 -> NO MORE TO DOD MOV 2(R3),R4 ;GET DEVICE INFO  SWAB R4 ;PUT IN GOOD FORMAT$ BIC #177400,R4 ;ISOLATE # OF UNITS CLR UNIT ;UNIT COUNTERT.FORLOP: MOV UNIT,R1 ;COPY FOR GETUCB ROUTINE# TST USRSPC ;USER SPECIFIED LIST? ) BEQ CHKSYS ;NO. JUST SEE IF IN SYSTEME;I;;CHECK TO SEE IF THE DEVICE IS IN THE LIST THE USER GAVE USV;E# MOV SAVEMB,R0 ;GET PACKET ADDRESSY/ MOV (R0)+,DEVCNT ;NUMBER OF USER SPEC DEVICESI-TRYAGN: CMP (R0),R2 ;DEVICE NAMES THE SAME?V BNE NXTLST ;NO. GET ANOTHER! CMPB 2(R0),R1 ;UNIT # THE SAME?E$ BEQ CHKSYS ;YES. DO MORE CHECKING+NXTLST: ADD #4,R0 ;POINT TO NEXT USER DEVC$ DEC DEVCNT ;ONE LESS DEVICE TO DO" BGT TRYAGN ;IF MORE GO CHECK IT$ BR ENDFOR ;NOT THERE SO IGNORE IT;QG;A POSSIBLE DEVICE HAS BEEN OBTAINED. CHECK TO SEE IF THE SYSTEM KNOWSSF;ABOUT THAT DEVICE. IF NOT, THEN IGNORE IT. IF IT DOES THEN SAVE THE7;INDEX (WITHIN ERRORS.ACC) TO THE DEVICE'S INFORMATION.N;M+CHKSYS: CALL GETUCB ;IS DEVICE IN SYSTEM?T BCS ENDFOR ;NO. TST R0 ;UCB FOR IT?* BEQ ENDFOR ;NONE OR DEVICE WAS OFFLINE.! MOV 2(R3),(R5) ;GET DEVICE INFOT' BIC #177400,(R5) ;ISOLATE BASE OFFSETS MOV UNIT,R0 ;GET THE UNIT # ASL R0 ;WORD OFFSET ITF" ADD R0,(R5)+ ;CALC ACTUAL OFFSET" INC TOTITM ;ONE MORE ITEM TO DO!ENDFOR: INC UNIT ;GET NEXT UNIT DEC R4 ;ONE LESS UNIT TO DO% BGT FORLOP ;THERE WAS ONE SO DO IT ADD #4,R3 ;GET NEXT DEVICEH BR NXTDEV ;AND START OVER#DONE: TST TOTITM ;ANYTHING TO DO?Y BNE 5$ ;YES SO GO DO IT% JMP CLSOUT ;CLO00qTTADATADATADATADATADATADATADATADATASE USER OUTPUT FILEN; );OPEN THE ERRORS.ACC FILE FOR PROCESSING.E;E(5$: MOV #ACFID$,R4 ;USE ERRORS.ACC FILE$ CALL GETFID ;GET OLD FID IF THERE BCS 10$ ;NOT THEREF OFID$R #ACCFDB ;OPEN BY FID BCC 30$ ;IT IS OPENED110$: OPEN$R #ACCFDB,#ACCLUN,#$ACCNM ;OPEN BY NAMET BCC 15$ ;IT IS OPENED$ MOV #ACCERR,R3 ;ERRORS.ACC MISSING( JMP ERROR ;PRINT OUT AN ERROR MESSAGE$15$: MOV #ACFID$,R4 ;USE ERRORS.ACC" CALL PUTFID ;SAVE FID FOR LATER+30$: MOV #1,R1 ;ASSUME SHORT TERM BLOCK #O- BIT #HISBIT,FLAG1 ;IS IT THE HISTORY BLOCK?F( BEQ 32$ ;NO. USE THE SHORT TERM BLOCK% INC R1 ;INDICATE LONG TERM BLOCK # <32$: GET$R #ACCFDB,#BLOCK,#512.,R1,#0 ;READ IN DESIRED BLOCK* CLOSE$ #ACCFDB ;NO LONGER NEED THE FILE;:B;OUTPUT THE DISPLAY BANNER WITH THE ZERO / UPDATE DATES AND TIMES.I;THE FORMAT OF THE TIMES MUST BE CHANGED AROUND A BIT FOR EASY PROCESSINGR9;BY EDMSG. (IT ALSO GIVES US THE DESIRED OUTPUT FORMAT).D;;! CALL SKIP ;OUTPUT 1 BLANK LINE  MOV #ARGBLK,R0 ;BASE ADDRESS# MOV #LENCUR,(R0)+ ;LENGTH OF TEXTB0 MOV #CURTXT,(R0)+ ;MESSAGE OF THE CURRENT TEXT. MOV #<12.-LENCUR>,(R0)+ ;NUMBER OF PAD SPACES+ BIT #HISBIT,FLAG1 ;IS IT HISTORY SECTION?D BEQ 35$ ;NO.A$ MOV #ARGBLK,R0 ;START AT BEGINNING# MOV #LENHIS,(R0)+ ;LENGTH OF TEXTE, MOV #HISTXT,(R0)+ ;MESSAGE OF HISTORY TEXT. MOV #<12.-LENHIS>,(R0)+ ;NUMBER OF PAD SPACES35$:2 MOV BLOCK+AL.ZER+06,(R0)+ ;SET UP TO DISPLAY TIME( MOV BLOCK+AL.ZER+10,(R0)+ ; " "( MOV BLOCK+AL.ZER+12,(R0)+ ; " "# MOV #1,R1 ;ASSUME NORMAL SPACINGB) CMP BLOCK+AL.ZER+04,#10. ;CHECK THE DAY N BGE 36$ ;IT IS TWO DIGIT DAY;" INC R1 ;ASSUME EXTENDED SPACING/36$: MOV R1,(R0)+ ;USE TO SEPARATE TIME & DATE) MOV BLOCK+AL.ZER+00,(R0)+ ; " "#) MOV BLOCK+AL.ZER+02,(R0)+ ; " "T( MOV BLOCK+AL.ZER+04,(R0)+ ; " " MOV #OUTBUF,R0 ;OUTPUT BUFFERP MOV #BANNER,R1 ;FORMAT MOV #ARGBLK,R2 ;ARGUMENTSA CALL $EDMSG ;FORMAT THE LINE+ MOV #OUTBUF,R0 ;BUFFER ADDRESS CALL OUTPUT ;WRITE IT OUT" MOV #ARGBLK,R0 ;START OVER AGAIN4 MOV BLOCK+AL.UPD+06,(R0)+ ;MOVE DATE /TIME TO BLOCK( MOV BLOCK+AL.UPD+10,(R0)+ ; " "( MOV BLOCK+AL.UPD+12,(R0)+ ; " "# MOV #1,R1 ;ASSUME NORMAL SPACINGE) CMP BLOCK+AL.UPD+04,#10. ;CHECK THE DAY E BGE 37$ ;IT IS TWO DIGIT DAYB" INC R1 ;ASSUME EXTENDED SPACING/37$: MOV R1,(R0)+ ;USE TO SEPARATE TIME & DATE ( MOV BLOCK+AL.UPD+00,(R0)+ ; " "( MOV BLOCK+AL.UPD+02,(R0)+ ; " "( MOV BLOCK+AL.UPD+04,(R0)+ ; " " MOV #OUTBUF,R0 ;OUTPUT BUFFER  MOV #BANER2,R1 ;FORMAT MOV #ARGBLK,R2 ;ARGUMENTS  CALL $EDMSG ;FORMAT THE LINE0 MOV #OUTBUF,R0 ;BUFFER ADDRESS CALL OUTPUT ;WRITE IT OUT;,H;TIME NOW TO GENERATE THE VARIOUS BLOCKS OF INFORMATION FOR THE DISPLAY.;E) MOV #DEVPNT-4,SAVCON ;FOR DEVICE MAPPINGS MOV TOTITM,TEMTOT ;WORK COPY;RE;THE FIRST BLOCK HERE GENERATES THE LIST OF DEVICE NAMES / UNITS THAT E;ARE TO BE OUTPUT. A MAXIMUM OF EIGHT SUCH DEVICES CAN GO ON 1 LINE.0B;IF MORE DEVICES ARE IN THE SYSTEM, THEN THE DISPLAY BLOCK WILL BE8;REPEATED UNTIL ALL THE NECESSARY DEVICES ARE DISPLAYED.;MGENLIN:N! CALL SKIP ;OUTPUT 1 BLANK LINES& MOV #OUTBUF,R0 ;WHERE THE RESULTS GO MOV #24.,R1 ;'TAB'A+5$: MOVB #' ,(R0)+ ;BLANK OUT LEADING EDGE# DEC R1 ;ONE LESS BLANK TO OUTPUT  BGT 5$ ;DO THE ENTIRE THING; ';PROCESS UP TO EIGHT DEVICES FOR OUTPUT ; ) MOV TEMTOT,DOIT ;GET THE MOST IT CAN BE  CMP DOIT,#8. ;TOO MANY?G BLE 7$ ;JUST RIGHTO" MOV #8.,DOIT ;MAKE IT JUST RIGHT(7$: MOV DPNTR,R4 ;GET POINTER TO OFFSET$8$: MOV (R4)+,R5 ;GET ACTUAL OFFSET MOV SAVCON,R3 ;RESTORE CONTEXT(9$: ADD #4,R3 ;LOOK AT THE NEXT PACKET CMPB R5,2(R3) ;IS IT BIGGER? BGE 9$ ;NO. KEEP LOOKING  SUB #4,R3 ;YES. BACK UP ONE.G& MOV R3,ARGBLK ;SAVE ADDR OF DEV NAME+ MOV R3,SAVCON ;SAVE CONTEXT FOR NEXT TIMEO# MOV 2(R3),R3 ;GET STARTING OFFSET( BIC #177400,R3 ;CLEAR OUT UNEEDED INFO SUB R3,R5 ;BIAS IT FROM THAT CLC ;INSURE NO CARRY SET ASR R5 ;DIV00yZ^"IDE IT BY 2T- MOV R5,ARGBLK+2 ;SAVE THE UNIT # FOR OUTPUT  MOV #DEVLIN,R1 ;FORMAT MOV #ARGBLK,R2 ;ARGUMENTSO CALL $EDMSG ;FORMAT THE LINEO! DEC DOIT ;CHECK FOR MORE TO DO) BGT 8$ ;THERE IS MORE$ SUB #OUTBUF,R0 ;HOW BIG IS BUFFER?! MOV R0,R1 ;COPY IT FOR DISPLAYS) MOV #OUTBUF,R0 ;ADDRESS TO DISPLAY FROM  CALL OUTPUT ;AND DISPLAY IT( MOV TEMTOT,DOIT ;GET NUMBER LEFT TO DO CMP DOIT,#8. ;MORE THAN 1 LINE BLE 10$ ;NO. USE IT AS IS MOV #8.,DOIT ;CLAMP IT TO 8A010$: MOV #DOTAB,R3 ;GET MESSAGE TABLE (HISTORY)&15$: MOV (R3)+,R4 ;ACTUAL MSG ADDRESS BEQ 900$ ;0 -> ALL DONE& MOV #OUTBUF,R0 ;SET UP OUTPUT BUFFER$ MOV #22.,R5 ;MOVE MESSAGE INTO IT*20$: MOVB (R4)+,(R0)+ ;ONE CHAR AT A TIME DEC R5 ;NEXT XHAR BGT 20$ ;AND KEEP GOING MOV (R3)+,R5 ;GET BASE ADDRESS MOV DPNTR,R4 ;GET INDEX TO USE MOV DOIT,TEMP ;WORKING COPYO25$: MOVB #' ,(R0)+ ;SEPARATORD MOV (R4)+,R1 ;GET INDEX! ADD R5,R1 ;ADD BASE ADRR TO IT#$ MOV (R1),R1 ;GET THE ACTUAL VALUE& MOV #027012,R2 ;FLAGS FOR CONVERSION CALL $CBTA ;CONVERT TO ASCIIE MOVB #' ,(R0)+ ;SEPARATORE DEC TEMP ;ONE LESS TO DOT BGT 25$ ;KEEP GOING" SUB #OUTBUF,R0 ;CALC OUTPUT SIZE MOV R0,R1 ;COPY FOR OUTPUTE( MOV #OUTBUF,R0 ;ADDRESS TO OUTPUT FROM CALL OUTPUT ;AND OUTPUT ITA" BR 15$ ;AND TRY ANOTHER MESSAGE,900$: MOV DOIT,R4 ;GET NUMBER DEVICES DONE CLC ;INSURE NO CARRY ASL R4 ;MAKE IT WORD OFFSET1 ADD R4,DPNTR ;POINT TO NEXT PLACE WITHIN SYSTAB;$ SUB DOIT,TEMTOT ;HOW MANY ARE LEFT BLE 910$ ;BR IF NO MORE TO DO JMP GENLIN ;GO BACK FOR MORE,910$:; CALL SKIP ;SKIP 1 BLANK LINE  CALL SKIP ;SKIP 1 BLANK LINES, MOV BLOCK+AL.MP,ARGBLK ;MEMORY PARITY COUNT0 MOV BLOCK+AL.UI,ARGBLK+2 ;UNEXPECTED INTERRUPTS MOV #OUTBUF,R0 ;BUFFER ADDRESS" MOV #LSTFMT,R1 ;FORMAT STATEMENT' MOV #ARGBLK,R2 ;ARGUMENT BLOCK TO USE  CALL $EDMSG ;FORMAT THE LINEC( MOV #OUTBUF,R0 ;ADDRESS TO OUTPUT FROM CALL OUTPUT ;OUTPUT ITL CALL SKIP ;SKIP 1 BLANK LINET! BIT #FILOUT,FLAG1 ;FILE OUTPUT?  BNE CLSOUT ;YES.( QIOW$C IO.DET,TILUN,1 ;DETACH TERMINAL RETURN ;WHENCE WE CAME(CLSOUT: CLOSE$ #USRFDB ;CLOSE THE FILE RETURN ;WHENCE WE CAMEN;=============================================================================I;THIS ROUTINE OUTPUTS THE GENERATED BUFFER TO THE APPRORIATE DESTINATION.RG;IF AN OUTPUT FILE HAS BEEN SELECTED, IT GOES THERE ELSE IT GOES TO THE;;USER'S TERMINAL.RN;============================================================================='OUTPUT: TST ABORT ;DID AN ABORT OCCUR) BEQ KILOUT ;NO. KEEP PROCESSING THEN., BIT #FILOUT,FLAG1 ;USER OUTPUT FILE GIVEN?) BEQ NOTFLE ;NO. NOTHING TO WORRY ABOUTW- MOV #AMSG,R2 ;PREMATURELY TERM MESSAGE ADDR=0 MOV #AMSGL,R1 ;PREMATURELY TERM MESSAGE LENGTH. PUT$ #USRFDB,R2,R1 ;WRITE IT FOR USER TO SEE) CLOSE$ #USRFDB ;CLOSE THE FILE CLEANLYE(NOTFLE: MOV #EX$ERR,EXSTA ;ERROR STATUS' JMP $EXST ;YES. LEAVE ELI COMPLETELY=.KILOUT: BIT #FILOUT,FLAG1 ;OUTPUT FILE GIVEN? BNE FILE ;BR IF YES.S0WRITTI::QIOW$S #IO.WVB,#TILUN,#1,,,, RETURN ;WHENCE WE CAME'FILE: MOV R2,-(SP) ;SAVE WORK REGISTER?( MOV R0,R2 ;COPY SINCE PUT DESTROYS R0& PUT$ #USRFDB,R2,R1 ;WRITE THE RECORD% MOV (SP)+,R2 ;RESTORE WORK REGISTERY RETURN ;WHENCE WE CAMEM;============================================================================A7; THIS ROUTINE WRITES A BLANK LINE TO THE TERMINAL/FILETM;============================================================================.SKIP: MOV #BLANK,R0 ;BUFFER TO WRITE (BLANKS), MOV #1,R1 ;NUMBER OF CHARACTERS TO OUTPUT/ JMP OUTPUT ;WRITE IT OUT TO FILE OR TERMINAL?& ;OUTPUT RTN WILL RETURN TO CALLER ;OR EXIT IF ELI WAS ABORTED .ENDD% MOV (SP)+,R2 ;RESTORE WORK REGISTERY RETURN ;WHENCE WE CAMEM;============================================================================A7; THIS ROUTINE WRITES A BLANK LINE TO THE TERMINAL/FILETM;===========================================================================00TUTADATADATADATADATADATADATADATADATA# .TITLE ERRMSG - ELI error messagesI .IDENT /V02.00/;L;; ; COPYRIGHT (C) 1983, 1985 BY); DIGITAL EQUIPMENT CORPORATION, MAYNARD2(; MASSACHUSSETTS. ALL RIGHTS RESERVED.; 5; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAYT5; BE USED AND COPIED ONLY IN ACCORDANCE WITH THE05; TERMS OF SUCH LICENSE AND WITH THE INCLUSION OF THE:5; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER(5; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE25; MADE AVAILABLE TO ANY OTHER PERSON. NO TITLE TOR5; AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED.;85; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO5; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUEDF5; AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;D6; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR 5; RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT ISI; NOT SUPPLIED BY DIGITAL.;N;T; Module: ERRMSG.MAC ; 7; Version: V02.00 INITIAL RELEASE OF RSX-11M-PLUS V3.0N; MICRO/RSX V3.0; ; Author: Joe MelvinH#; (text taken from other modules)F;E ; Date: 1983I;R;I ; Function:O;A4; This module provides a central location for error7; messages generated by ELI. This aids international-U ; ization.A;N;;; Modified By:; ; J. Melvin 25-Oct-835; JM017 Make task name in error message dynamic ;T;I; Local Macros;  .MACRO MESAGE,TYPE,TEXT .NCHR TXTLEN,e .BYTE TXTLEN ;message length  .BYTE TYPE ;message severityC .ASCII /TEXT/ ;messager .EVENl .ENDM MESAGE .ENABL LC .EVEN9COMER:: MESAGE ER.WAR,o,INSER:: MESAGE ER.WAR,+PRVER:: MESAGE ER.WAR,a2REQER:: MESAGE ER.WAR,3RECER:: MESAGE ER.WAR,  e>OPNERR:: MESAGE ER.WAR,8FILINV:: MESAGE ER.WAR,DWLDFIL:: MESAGE ER.WAR,<XSFIL:: MESAGE ER.WAR,:OPNLOG:: MESAGE ER.WAR,9RDERR:: MESAGE ER.WAR,ECACCERR:: MESAGE ER.WAR,LCLFMERR:: MESAGE ER.WAR,3ILLER:: MESAGE ER.WAR,t;UNPKT:: MESAGE ER.WAR,o8AMBPKT:: MESAGE ER.WAR,+GCMER:: MESAGE ER.WAR,t%SYNER:: MESAGE ER.WAR,:;MAXER:: MESAGE ER.WAR,M3FILER:: MESAGE ER.WAR,EONOFEAT:: MESAGE ER.WAR, ;W; ;W; ;SET UP POINTER FOR NEXT DEVICE .ENDM .MACRO DEFINE LIST 0 .IRP ENTRY, ;DO FOR ALL DEVICES SPECIFIED$ DEVICE ENTRY ;DEFINE A GIVEN ENTRY .ENDM .ENDMM;============================================================================;G; The following tables are order dependent. DO NOT CHANGE THE ORDER.M;============================================================================MM;=============================================================================+; Allocate slots for the header informationE;D)AL.ZER: .BLKW 8. ; date file last zeroed.0AL.UPD: .BLKW 8. ; date file was lasted updated4DATLEN = <.-AL.ZER>/2 ;# WORDS IN BOTH DATE FIELDSN;=============================================================================3; Allocate the slots for the long term error counts ;NAL.ACC:D*AL.MP: .BLKW 1. ; memory protect counter-AL.UI: .BLKW 1. ; unknown interrupt counter=5AL.UIO: .BLKW MAX.DV ; UNRECOVERED I/O ERROR COUNTER=3AL.RIO: .BLKW MAX.DV ; RECOVERED I/O ERROR COUNTERn2AL.HTO: .BLKW MAX.DV ; HARD TIMEOUT ERROR COUNTER2AL.STO: .BLKW MAX.DV ; SOFT TIMEOUT ERROR COUNTER1AL.SI: .BLKW MAX.DV ; SPURIOUS INTERRUPT COUNTER 5AL.LIM: .BLKW MAX.DV ; DEVICE LIMITS REACHED COUNTER=0AL.BR: .BLKW MAX.DV ; BLOCK REPLACEMENT COUNTER SHORT = <.-AL.ACC>/2r .PSECT;NAL.ACC:D*AL.MP: .BLKW 1. ; memory protect counter-AL.UI: .BLKW 1. ; unknown interrupt co;0A; COMMAND FILE TO ASSEMBLE THE ERROR LOGGER TASKS: ELI,AND ERRLOG1;E%; WRITTEN BY S.C. ADAMS JAN 20, 1981F;E; modified by:2; J. Melvin 01-JUN-83 simplified error logging.; 06-JUN-83 correct ERRPAR cmnd line err(; 25-OCT-83 move error messages to%; a separate module (ERRMSG),;R; ELI:;NSOU:ERRELI,[17,34]ERRELI/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRELINSOU:ERRPAR,[17,34]ERRPAR/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRPARCSOU:ERRMSG,[17,34]ERRMSG/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRMSG SOU:ERRSHO,[17,34]ERRSHO/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRSHOiSOU:ERRSHN,[17,34]ERRSHN/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRSHN8; ; COMMON;sSOU:ERRUCB,[17,34]ERRUCB/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRUCBRSOU:ERRRSB,[17,34]ERRRSB/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRRSBRSOU:ERRRDT,[17,34]ERRRDT/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRRDTR;/;= ; ERRLOG:M;1SOU:ERRLOG,[17,34]ERRLOG/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRLOG1SOU:ERRPRC,[17,34]ERRPRC/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRPRC11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRSHN8; ; COMMON;sSOU:ERRUCB,[17,34]ERRUCB/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRUCBRSOU:ERRRSB,[17,34]ERRRSB/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10]PREFIX,ERRRSBRSOU:ERRRDT,[17,34]ERRRDT/-SP=[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,IN:[17,10 PEOF1ERRLOG 00010001000100 00000 00000 000055DECFILE11A PPEOF2U0414404144 M 00 PPHDR1MTAACP 00017061000100 00000 00000 000000DECFILE11A PPHDR2U0414404144 M 00 PPMTAACPSBINT27AUG85U   <1= DR06SEP85091628DECNPe _vߋt& dR 5@V$d zt|xx| ҁr& 6L~7L e7x~~E҈C2S.  ***THIS VOLUME DOES NOT CONTAIN A HARDWARE BOOTABLE SYSTEM ***  w 4  ť ť 0B < Aaw  ' UD$BA  &( U BQ b Е*  & & PPFSBINT27AUG8511JUL85C|05SEP85141554SBINT27AUG85[001,001] DECFILE11A 1PUFD\vzP xQkQxQkQ/Q}kQ5RkQ;R8wkQA RdkQG R4kQMRkQS!S& kQY3S}kQ_WS:kQeWS:dkQjWSvkQv^SMkQ|S2kQStwkQS2kQT2kQ!TT[kQ'TkQTMkQ U]kQWS?TkQ R?TkQ\S?TkQS,xkQ>R=kQSwkQSqkQ>R kQ QDkQQ&kQRb'kQ"SzkQ?aTkQkQET*KkQK!SfkQQR(kQWkQ]skQbJkQlQakQvoQ:dkQ|TkQTkkQTkQTkQWSkQT*KkQRpkQ|QPkQQ kQkQ|QkQ|QkQXWSkQZWSkQ` RckQtQ[MkQdQwkQgQxkQ@Q(}kQiT{kQkxQNqkQp[S+kQyoT?TkQuQ`rkQzQ@GkQ}T2kQT}kQrTkQ'TЉkQQw*@QkQT2kQW(}kQ;T_kQQkQoQwkQ}QkQkQkQoQrkQQPkQ!TT[kQ'TkQTMkQ U]kQWS?TkQ R?TkQ\S?TkQS,xkQ>R=kQSwkQSqkQ>R kQ QDkQQ&kQPUFD^zPE _MSE aTE Q@GkQ}T2kQT}kQrTkQ'TЉkQQw*@QkQT2kQW(}kQ;T_kQQkQoQwkQ}QkQkQkQoQrkQQPkQ!TT[kQ'TkQTMkQ U]kQWS?TkQ R?TkQ\S?TkQS,xkQ>R=kQSwkQSqkQ>R kQ QDkQQ&kQPHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADHEADPPUFD\vzP. GxQkQ27AUG8518391427AUG851839116ٗ.G xxQkQ27AUG8518391727AUG85183915 :./GQ}kQ27AUG8518393227AUG85183929X.5GRkQ27AUG8518393527AUG85183933gJ.;HR8wkQ27AUG8518393927AUG85183936la.AG RdkQ27AUG8518394227AUG85183940qq.GG R4kQ27AUG8518394527AUG85183943v.MGRkQ27AUG8518394927AUG85183946y.SG!S& kQ27AUG8518395327AUG85183950.YH:3S}kQ27AUG8518395627AUG85183954"._GWS:kQ27AUG8518400027AUG85183957>.eJWS:dkQ27AUG8518400427AUG85184001.jGWSvkQ27AUG8518400727AUG85184005.vG ^SMkQ27AUG8518401427AUG85184012 .|GS2kQ27AUG8518401827AUG851840156.MfStwkQ27AUG8518402127AUG85184019.G@S2kQ27AUG8518402427AUG85184022ڵ.GHT2kQ27AUG8518402727AUG85184025+.G`!TT[kQ27AUG8518403327AUG85184031.G'TkQ27AUG8518403527AUG851840333.GTMkQ27AUG8518404027AUG85184039 .G U]kQ27AUG8518404227AUG85184041.G*WS?TkQ27AUG8518404927AUG85184046#i.G R?TkQ27AUG8518405327AUG85184050).G\S?TkQ27AUG8518410027AUG851840589`.G NS,xkQ27AUG8518410327AUG85184101> .G>R=kQ27AUG8518411027AUG851841080.GSwkQ27AUG8518411327AUG85184111_.G SqkQ27AUG8518412427AUG85184121 w.J>R kQ27AUG8518412727AUG85184125|. G tQDkQ27AUG8518413927AUG85184137 .G jQ&kQ27AUG8518414327AUG85184140 .GRb'kQ27AUG8518414627AUG85184144Ϯ."DfSzkQ27AUG8518415327AUG85184151D.?E aTkQkQ27AUG8518420927AUG85184206 8.EGxT*KkQ27AUG8518421227AUG85184209E.KGz!SfkQ27AUG8518421527AUG85184213[.QGR(kQ27AUG8518421927AUG85184216u.WMkQ27AUG8518422327AUG85184220}.]L++skQ27AUG8518422627AUG85184224*GO.bFJkQ27AUG8518422927AUG85184227?.lL QakQ27AUG8518423527AUG85184232 8.vC :oQ:dkQ27AUG8518424427AUG85184241 +.|GTkQ27AUG8518424827AUG85184245.GTkkQ27AUG8518425027AUG85184248 -.G TkQ27AUG8518425427AUG85184251/.G$TkQ27AUG8518425727AUG85184254n..G(WSkQ27AUG8518430027AUG85184258#.G:T*KkQ27AUG8518430427AUG85184301 +.I`RpkQ27AUG8518431327AUG85184309Lu.O|QPkQ27AUG8518431627AUG85184313PU|.KHQ kQ27AUG8518432227AUG85184320xQ.S##jkQ27AUG8518432627AUG85184323"~yx.G|QkQ27AUG8518432927AUG85184327D.G |QkQ27AUG8518433227AUG85184330 .X<rWSkQ27AUG8520165327AUG85201649B#.ZFWSkQ27AUG8520170527AUG85201654&.`J< RckQ27AUG8520171227AUG85201706§.G&tQ[MkQ27AUG8520172027AUG85201713.dEQwkQ27AUG8520173027AUG85201724).gBvQxkQ27AUG8520173527AUG85201731.@G<Q(}kQ27AUG8520174027AUG85201736-.iG4T{kQ27AUG8520174627AUG85201741 .kQ33xQNqkQ27AUG8520181127AUG8520174822.pH [S+kQ27AUG8520181827AUG85201812D].yG oT?TkQ27AUG8520183327AUG85201821M.uGQ`rkQ27AUG8520184727AUG85201836Vs.zG|Q@GkQ27AUG8520185227AUG85201848k .}NdT2kQ27AUG8520185927AUG85201853rq.G T}kQ27AUG8520190727AUG85201901 x .?rTkQ27AUG8520191327AUG85201908.GB'TЉkQ27AUG8520193027AUG85201915-0.GQw*@QkQ27AUG8520193327AUG85201931.GT2kQ27AUG8520194427AUG85201935&.OW(}kQ27AUG8520195327AUG85201945q(.G ;T_kQ27AUG8520200427AUG852019575.GjQkQ27AUG8520202327AUG85202006 C.E"oQwkQ27AUG8520203827AUG85202029.Of}QkQ27AUG8520205327AUG85202040%.G ,kQkQ27AUG8520210227AUG85202055 .GoQrkQ27AUG8520211127AUG85202102x.L$$QPkQ27AUG8520212927AUG85202112#&PUFD^zP.0E _M28AUG8502100228AUG85021002N(V.I8SE 28AUG8502100328AUG85021003O^.VaTE 28AUG8502100428AUG85021004 QlPDATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATADATAP0 6:0E = $BEGIN MAPC 0001 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSION; ; E.H. MARISON 10-FEB-1975; 9; DISPATCH PROCESSOR FOR ANCILLARY PROCESSOR CONTROL QI/OG; ; ; MACRO LIBRARY CALLSU; ; EQUATED SYMBOLSY; 2 APCFHI=APCLEN-2 ;HIGHEST IMPLEMENTED FUNC CODE;A; IMPURE DATA AREA; ; PURE DATA AREA;L; APC FUNC DISPATCH TABLEA;IAPCDTB: ! .WORD .AUC ;USER CONTROL FUNCU& .WORD .APV ;PRIVLEDGE CONTROL FUNC;) APCLEN=.-APCDTBA;Q M; ;+4; DISPATCH PROCESSOR FOR ANCILLARY PROCESSOR CONTROL5; FUNCTIONS. THE SUB - FUNCTION CODE FOR THE APC QI/OM<; IS IN IN LOW BYTE OF THE I/O FUNCTION CODE. THIS PROCESSOR-; DISPATCHS TO THE SUB - FUNC CODE PROCESSOR.A;U; CALLED VIA A $CALL; INPUTS: "CURRENT PROCESS"H;E8; OUTPUTS SUB-FUNC PROCESSOR INVOKED (VIA A CALLR "JMP");D;-;A.APC::: LET R0 :== I.FCN(R5) R.SHIFT 2 ;GET IDX INTO DISP TABLE LET R0 := R0 CLEARED.BY #^C76V IF R0 GT #APCFHI( ERROR IE.BAD  ENDH( CALLR @APCDTB(R0) ;ALL IS OK DISPATCH; ;C .ENDHE SUB - FUNCTION CODE FOR THE APC QI/OM<; IS IN IN LOW BYTE OF THE I/O FUNCTION CODE. THIS PROCESSOR-; DISPATCH8 $BEGIN MAPV 0006 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYL0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDF@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSION; ; E.H. MARISON 10-FEB-1975; G. KUENNING 22-SEP-78 GK001T;N8; DISPATCH PROCESSOR FOR PRIVLEDGE ACP CONTROL FUNCTIONS;H;S; MACRO LIBRARY CALLSR;E; LOCAL MACROS;T .MACRO ENTRY,CODE,MAXSIZ,ADDRQ .BYTE CODE,MAXSIZS .WORD ADDR .ENDM ; ; EQUATED SYMBOLSA;I& APVDTL=4. ;DISP TABLE ENTRY LENGTH; ; IMPURE DATA AREA;.; COMMAND BUFFER FOR RSX11D9;B .IF NDF R$$11M.CMD:: .BLKW 2 .ENDCE;S; PURE DATA AREA;E; !; APV COMMAND LIST DISPATCH TABLEV;IAPVDTB: ( ENTRY 0,0,ENDP ;END OF LIST PROCESSOR, ENTRY 1,S.CMBF&377,.MOUNT ;MOUNT PROCESSOR& ; ASSUMES 512. IS MAX BYTE COUNT' ENTRY 2,0.,.DMOU ;DISMOUNT PROCESSORSAPVDTE:M;O T;C;+;S;; DISPATCH PROCESSOR FOR APV'S (ACP PRIV CONTROL FUNCTIONS) ;A; INPUTS: "CURRENT PROCESS" '; I/O REQUEST DPB SAME AS STD FILES DPBD; WHERE THE FID IS A DON'T CARER,; THE ATTR/CMD LIST IS THE DRIVING PARAMETER.; THE EXTEND,ACCESS, AND FNB PARM MUST BE ZERO; 4; OUTPUTS: .IOSTS UPDATE WITH RETURN STATUS FOR USER;N;-;D .ENABL LSB.APV::;,,; CHECK TO MAKE SURE REQUESTOR00>DATADATADATADATADATADATADATADATADATADATA IS PRIVLEDGED;E .IF DF R$$11DE& LET R0 := I.ATL(R5) ! R0 := A.TD(R0) IF #SF.PT NOT.SET.IN S.FW(R0)+ .IFF# LET R0 := I.TCB(R5) ;ERS GET ATLV9 IF #T3.PRV NOT.SET.IN T.ST3(R0) ;ERS IS TASK PRIVLEDGED/ .ENDC & ERROR IE.PRI  ENDA;N-; GET COMMAND LIST POINTER AND CHECK VALIDITYR; OF THE I/O REQUEST PARAMETERSF;P3 LET R0 := R5 + #I.RWAT ;R0 = PTR TO CMD LIST PTRE% LET R2 := (R0)+ ;R2 = CMD LST PTRE IF RESULT IS EQ" ERROR IE.BAD  ENDE8 LET R1 := (R0)+ OR (R0)+ ;ALL OTHER PARM MUST BE ZERO LET R1 := R1 OR (R0)+ OR (R0)+% .IIF DF,R$$11M,LET R1 := R1 OR (R0)  IF RESULT IS NEF+ ERROR IE.BAD I END/; 0; ALL IS OK WITH DPB PARAMETERS, NOW DISPATCH ON,; COMMAND LIST. (NOTE: R2 = PTR TO CMD LIST);L .IF DF,R$$11MI;R ; RSX11M CODER;1 REPEAT R0 := #6. ;SETUP MAX REPEAT LOOP COUNT ;E# $CALL SEARCH ;SEARCH DISP TABLET ON.ERROR& ERROR IE.BAD  END$ PUSH R2 ;SAVE PTR INTO CMD LIST( $CALL @(R1)+ ;CALL COMMAND PROCESSOR% POP R2 ;GET BACK PTR TO CMD LISTT BCS 20$ ;BREAK OUT ON ERRORS ; GK001 .IF DF R$$MPL ; GK001 ; GK0017 LET R2 := R2 + #8. ;BUMP TO NEXT CMD IN LIST ; GK001  ; GK001 .IFF ; GK001R ; GK001/ LET R2 := R2 + #6. ;BUMP TO NEXT CMD IN LISTT ; GK001 .ENDC ; GK001 END ;LOOP BACKR; 20$: RETURN;  .IFF;L ; RSX11D CODE ;H10$:# $CALL SEARCH ;SEARCH DISP TABLE1 ON.ERROR& ERROR IE.BAD  ENDC$ PUSH R2 ;SAVE PTR INTO CMD LIST( $CALL @(R1)+ ;CALL COMMAND PROCESSOR" POP R2 ;GET PTR INTO CMD LIST( BCC 10$ ;LOOP UNTIL WE HAVE AN ERROR RETURN .ENDC ; ; END OF LIST PROCESSOR ;KENDP: / RETURN ERROR ;FORCE FAILURE SO WE BREAK OUTN; .DSABL LSB  .SBTTL SUBROUTINE SEARCH;;;+; SUBROUTINE SEARCHC;6; THIS SUBROUTINE SCANS THE DISPATCH TABLE FOR A MATCH.; WITH THE "CURRENT" ENTRY IN THE COMMAND LIST;R; CALL: $CALL SEARCH; 1; INPUTS: R2 = PTR TO "CURRENT" ENTRY IN CMD LISTT;M#; OUTPUTS: C-BIT CLEAR -- ALL IS OKD1; R1 POINTS TO ADDR OF COMMAND PROCESSOR FOR CMDC&; R3 POINTS TO THE COMMAND LIST ENTRY; (11M - COPY OF R2); (11D - PTR TO .CMD BLOCK)P; R2 11M SAME AS ENTRYC*; 11D POINTS TO NEXT ENTRY IN CMD LIST; %; C- BIT SET -- NO MATCH OR BAD SIZE ; R2 SAME AS C-BIT CLEARH; R3 SAME AS C-BIT CLEARP; R1 NOT DEFINEDT;-; NOTE: R1,R2,R3 USED ALL OTHER REG PERSERVED;;-; SEARCH:H .IF DF,R$$11M2;P ; RSX11M CODE ;R! LET R3 := R2 ;MAKE COPY OF R2T;E .IFF;S ; RSX11D CODEN;T PUSH R4,R2;;BRING CMD LIST ENTRY POINTED TO BY R2 INTO TASK ADDR SPACEY+ LET R1 := R5 ! R3 := #4 ! TOP := TOP + R3C LET R4 := #.CMD1 CALL ..BLXIC LET R3 := R4 POP R2,R4T ON.ERROR- TST (SP)+ ;ERROR ON BLKI REMOVE CALLING: ERROR IE.SPC ; PC AND ISSUE ERROR ENDE;E .ENDC ;E5; SEARCH CMD LIST DISP TABLE ( R3 POINTS TO COMMAND );R& LET R1 := #APVDTB ;GET PTR TO TABLE# WHILE R1 LO #APVDTE ;SEARCH LOOPR;-; CHECK FOR CODE MATCH AND ON MATCH CHECK FOR2#; PROPER SIZE. IF ALL IS OK RETURN. +; OTHERWISE CONTINUE UNTIL ALL IS OK OR THE 2; END OF THE TABLE IS REACHED AND THEN RETURN WITH; AN ERROR INDICATION.;  IFB (R1)+ EQ (R3)8 IFB 1(R3) IS NE ANDB 1(R3) LOS (R1) ORB (R1) IS EQ LET R1 := R1 + #1  RETURN NOERROR END  ENDE LET R1 := R1 + #APVDTL-1$ END  RETURN ERROR;  .ENDABLE# WHILE R1 LO #APVDTE ;SEARCH LOOPR;-; CHECK FOR CODE MATCH AND ON MATCH CHECK FOR2#; PROPER SIZE. IF ALL IS OK RETURN. +; OTHERWISE CONTINUE UNTIL ALL IS OK OR THE 2; END OF THE TABLE IS REACHED AND THEN RETURN WITH; AN ERROR INDICATION.;  IFB (R1)+ EQ (R3)8 IFB 1(R3) IS NE ANDB 1(R3) LOS (R1) ORB (R1) IS EQ LET R1 := R1 + #1  RETURN NOERR00/X:0E . $BEGIN MDATE 0010 < DATE HANDLING ROUTINES >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYS0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER$G; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDI@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; ; J. CLEARY 6-APR-78; <; JC012 - RENAME $CAT5 TO $MCAT5 TO PREVENT SYSTEM AMBIGUITY; ;H;S; MACRO LIBRARY CALLSR;E; EQUATED SYMBOLST; ; IMPURE DATA AREA;I; PURE DATA AREA;T ; MONTH TABLER;OMONTH: .ASCII /JANFEBMARAPRMAYJUN/Y .ASCII /JULAUGSEPOCTNOVDEC/H;I; DAYS IN THE MONTH TABLEA;MODAY: .BYTE 31.,28.,31. ;JAN,FEB,MAR .BYTE 30.,31.,30. ;APR,MAY,JUN .BYTE 31.,31.,30. ;JUL,AUG,SEP .BYTE 31.,30.,31. ;OCT,NOV,DEC;S S1 .SBTTL .DAT5A - RAD50 DATE TO ASCII DATE STRINGP;8;+:; THIS ROUTINE COVERTS THE RAD50 DATE IN THE FORM " YYDDD"$; TO THE ASCII DATE STRING "DDMMMYY";E; CALL $CALL .DAT5A;/; INPUTS: R0 = PTR TO WHERE TO STORE THE STRINGO*; R1 = PTR TO RAD50 DATE *** WORD ALIGNED;A; OUTPUTS: STRING STORED AWAYO(; R0 PTR TO NEXT BYTE AFTER LAST STORED'; R1 PTR TO NEXT BYTE AFTER RAD50 DATER; ; NOTE R2 IS DESTROYED;J;-.DAT5A:: PUSH R3,R4# LET SP := SP - #6. ;GET WORK AREAV LET R3 := R0 ! R4 := R15; *; CONVERT 1'ST WORD OF RAD50 DATE - (" YY);S LET R1 := (R4)+ ! R0 := SP+ $CALL $C5TA ;NOW HAVE ASCII STRING " YY"T+ LET (R0) :== #': ;MAKE IT A BINARY NUMBER $CALL $CDTB H ; R1 NOW = YEAR IN BINARY) LET R0 := SP ! PUSH := R1 ! R1 := (R4)+  ;GET DAY OF THE YEARO% LET PUSH := R0 ;SAVE PTR TO STRINGR $CALL $C5TAO LET (R0) :== #': POP R0 ;GET PTR TO STRINGR $CALL $CDTB  ;R1 NOW = BINARY DAYP LET R0 := TOP ;GET YEAR WHILE R0 IS GT LET R0 := R0 - #4. ENDF LET R2 := #1 ;INIT MONTHE BEGIN BLOCK 9 LET PUSH := 0 ! TOP :== MODAY-1(R2) ;GET INIT DAY COUNTE WHILE R1 GT (SP)& LET R1 := R1 - (SP) ;ADJ DAY COUNT0 IF R0 IS EQ AND R2 EQ #2 ;TEST FOR LEAP YEAR( LET R1 := R1 -1 ;ADJ FOR LEAP YEAR IF RESULT IS EQ  LET R1 := #29. LEAVE BLOCKT ENDR END:) LET R2 := R2 +1 ! TOP :== MODAY-1(R2)C END, END BLOCK1 TST (SP)+ ;CLEAN UP STACK:;OC; NOW HAVE THE MONTH IN R2 THE DAY IN R1 AND THE YEAR IS ON THE TOP *; OF THE STACK. PUT THEM IN THE WORK AREA.;U, LET TOP := POP ! 2(SP) := R2 ! 4(SP) := R1;E; CONVERT TO ASCII STRING DATE;  $CALL $DAT  LET R1 := R4 ! SP := SP + #6.; POP R4,R3  RETURN;E 14 .SBTTL .DATAJ - DATE PARM BLK TO ASCII JULIAN FORM; ;+1; THIS ROUTINE TAKES THE DATE PARAMETER BLOCK AND 5; CONVERTS IT TO AN ASCII STRING OF THE FORM " YYDDD"N;; CALL: $CALL .DATAJ; #; INPUTS: R0 = PTR TO OUTPUT STRINGM$; R1 = ADDR OF DATE PARAMETER BLOCK;O7; OUTPUTS: R0 = PTR TO NEXT BYTE AFTER LAST BYTE STOREDU; R1 = INPUT R1;2; NOTE R2 IS DESTROYED;E;-.DATAJ::;I; CONVERT YEAR TO ASCII ;T, PUSH R3,R1 ;SAVE REG'S AND MAKE TOP = R1! LET (R0)+ :== #40 ;STORE SPACET LET R1 := @R1 ;GET YEARA $CALL $CBDAT ;S ; CONVERT MONTH AND DAY TO "DDD";C< LET R2 := TOP ! R1 := (R2)+ ;SET R1 TO LEAP YEAR INDICATOR WHILE R1 IS GT LET R1 := R1 - #4. ENDR LET R3 := #1 ;R3 = MONTH IDX9 LET R2 := @R2 ! PUSH := 0 ;R2 = MONTH TOP = DAY OF YEARE WHILE R2 GT R3' LET 00/`5gTADATADATADATADATADATADATADATADATAPUSH := 0 ! TOP :== MODAY-1(R3)S> LET TOP := TOP + (SP)+ ;ADD IN MONTH'S DAYS TO YEAR'S DAYS ;ADJ FOR LEAP YEAR0 IF R1 IS EQ AND R3 EQ #2. THEN TOP := TOP +1 LET R3 := R3 +1 ;BUMP MONTH ENDC;C2; WE NOW HAVE THE DAY COUNT EXCEPT FOR THE MONTH'S; LET R1 := POP ! R2 := TOPR( LET R1 := R1 + 4(R2) ;ADD IN THE DAYS LET R3 := R0 ! SP := SP - #6.. $CALL $CBDMG ;+ ;NOW HAVE "00DDD" STRING IN WORK AREAR/ LET R0 := R0 - #3. ;POINT TO 1'ST REAL DIGIT ' LET (R3)+ :== (R0)+ ;STORE THEM AWAY ' LET (R3)+ :== (R0)+ ! (R3)+ :== (R0)+D% LET SP := SP + #6. ;CLEAN UP STACK  LET R0 := R3 POP R1,R3E RETURN P4 .SBTTL .DAT5J - DATE PARM BLK TO RAD50 JULIAN FORM;C;+4; ROUTINE TO CONVERT THE DATE PARAMETER BLOCK TO ITS.; RAD50 DATE IN THE FORM " YYDDD" (IE 2 WORDS);); CALL: $CALL .DAT5AE;3(; INPUTS: R0 = PTR TO OUTPUT WORDS (TWO); R1 = PTR TO PARM BLKV;0; OUTPUTS: R0 ADVANCED; R1 = INPUT R1-;.; NOTE R2 IS DESTROYED; ;-.DAT5J:: PUSH R0,R1$ LET SP := SP - #6. ;GET WORK AREA/ $CALL .DATAJ ;CONVERT TO JULIAN FORM 3 $CALL $MCAT5 ;GET 1'ST RAD50 WORD ;JC012 - LET @10(SP) := R1 ;AND STORE IT AWAY ;**-1O3 $CALL $MCAT5 ;GET 2'ND RAD50 WORD ;JC012L0 LET R2 := R1 ! SP := SP + #6. ;CLEAN UP ;**-1 POP R1,R0 TST (R0)+ ;BUMP TO 2'ND WORD$ LET (R0)+ := R2 ;STORE 2'ND WORD RETURN;P 2 .SBTTL $DAT -- CONVERT DATE PARAMETER BLK TO STG;.;+4; THIS ROUTINE CONVERTS A THREE WORD PARAMETER BLOCK9; OF INTERNAL DATE INTO A DATE STRING OF THE FORM DDMMMYYR; ; CALL: $CALL $DAT; ; INPUTS: R0 = STRING POINTER'; R1 = PTR TO PARAMETER BLOCK;P#; OUTPUTS: R0 = STRING PTR ADVANCED$; R1 IS DESTORYED;E;-$DAT::! LET PUSH := R3 ! R3 := R1 + #6.=; ; CONVERT THE DAY*; $CALL $CBDAT ;M; CONVERT THE MOUNTH;)( LET R1 := #MONTH-3 + -(R3) + @R3 + @R39 LET (R0)+ :== (R1)+ ! (R0)+ :== (R1)+ ! (R0)+ :== (R1)+;; CONVERT THE YEAR;  $CALL $CBDAT K POP R3 RETURN;T 8 .SBTTL $DATSB -- DATE STRING TO BINARY PARAMETER BLOCK;;+?; THIS ROUTINE TAKES AN ASCII DATE STRING OF THE FORM "DDMMMYY" 7; AND OUTPUTS THE DATE PARAMETER BLOCK OF STANDARD FORME;-; CALL: $CALL $DATSB:;3!; INPUTS: R0 = PTR TO DATE STRINGH; R1 = PTR TO DATE PARM BLK;R; OUTPUTS: R0 ADVANCED; DATE PARM BLOCK FILLED IN;+; NOTE: R2 AND R1 IS DESTROYED; ;- .ENABL LSB$DATSB::! LET PUSH := R3 ! R3 := R1 + #4.R; ; CONVERT DAYT;0 $CALL $CDTB E7 LET @R3 := R1 ! -(R3) := 0 ;STORE DAY AND INIT MOUNTHR& LET R0 := R0 -1 ;BUMP STG PTR BACK10$: ; REF TAGN( LET @R3 := @R3 +1 ;BUMP MONTH AND GET ;TABLE INDEX BUT FIRST' CMP @R3,#12. ;CHECK FOR OUT OF RANGE3 BGT 20$ 1 LET R1 := #MONTH-3 + @R3 + @R3 + @R3 ! R2 := R0B;; COMPAIR MONTH STRINGSD;  CMPB (R2)+,(R1)+ BNE 10$ CMPB (R2)+,(R1)+ BNE 10$ CMPB (R2)+,(R1)+ BNE 10$:; ; WE HAVE A MATCH ;R20$: ; REF TAGR;A; CONVERT YEAR;T5 LET R0 := R0 + #3. ! PUSH :== 2(R0) ! 2(R0) :== #':  $CALL $CDTB :- LET -(R3) := R1 ! -(R0) :== POP ! R3 := POPA RETURN .DSABL LSB .ENDONTH AND GET ;TABLE INDEX BUT FIRST' CMP @R3,#12. ;CHECK FOR OUT OF RANGE3 BGT 20$ 1 LET R1 := #MONTH-3 + @R3 + @R3 + @R3 ! R2 := R0B;; COMPAIR MONTH STRINGSD;  CMPB (R2)+,(R1)+ BNE 10$ CMPB (R2)+,(R1)+ BNE 10$ CMPB (R2)+,(R1)+ BNE 10$:; ; WE HAVE A MATCH ;R20$: ; RE. $BEGIN MEOVP 0004 < END OF VOLUME PROCESSOR >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYA0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER)G; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED @; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTIC005h;l0E E) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; "; END OF PHYSICAL VOLUME PROCESSOR; ; ; MACRO LIBRARY CALLST; ; EQUATED SYMBOLS ; ; IMPURE DATA AREA; ; PURE DATA AREA;I R;N;+9; THIS PROCESSOR IS INVOKED WHEN A TAPE MARK IS ENCOUNTEDR2; WHEN A HEADER LABEL WAS EXPECTED (VOL1 AND HDR1);T4; IF THE TAPE IS MOUNTED FOR BYPASS LABEL PROCESSINGD; .IOSTS IS SET TO IE.EOV AND CONTROL IS RETURNED WITH THE C-BIT SET; 6; OTHERWISE THE "LAST SET OF TRAILER" LABELS ARE READ2; AND CHECKED FOR EOF OR EOV. IF EOF THE RETURN ISD; AS FOR BYPASS PROCESSING IF EOV THEN THE NEXT VOLUME IS REQUESTED.@; IF THE VOLUME IS ONLINE THEN THE VOL1 LABEL IS CHECKED AND THEE; 1'ST HEADER LABEL READ (MAYBE HDR1) INTO .LAB1 AND CONTROL RETURNEDI>; WITH THE C-BIT CLEAR. OTHERWISE THE MOUNT MESSAGES ARE GIVEN; AND THE PROCESS BLOCKED.;F;-.EOVP::R% IFB #VM.BYP!VM.OLD SET.IN V.MOU(R4) ;T(; BYPASS AND OLD .FL300 LABEL PROCESING;E' TMSPACE #-1 ;BACKSPACE OVER EOV TMR LET V.TPOS(R4) :== 0# ERROR IE.EOV S ENDP; ; FULL LABELED PROCESSINGN; * TMSPACE #-3 ;POSITION TO TRAILER LABELS TMSPACE #1 LET V.TPOS(R4) :== #1T& $CALL .RDLB1 ;READ IN TRAILER LABEL ON.NOERROR AND .LAB1 EQ #"EO;; CHECK FOR EOF OR EOV;E IF .LAB1+2 EQ #"F1$ $CALL .GTFNO ;GET FILE NUMBERS) ERROR IE.EOV D END. IF .LAB1+2 EQ #"V1( CALLR .RQNXT ;GO REQUEST NEXT VOL ;AND RETURNC ENDV END 6 ERROR IE.BTF ;S .END; ; FULL LABELED PROCESSINGN; * TMSPACE #-3 ;POSITION' $BEGIN MEVSC 0006 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSION; ; E.H. MARISON 10-FEB-75;S; ELLEN R SIMICH 11-MAY-76; 4; ROUTINE TO SCAN THE VSCB CHAIN FOR SOMETHING TO DO; ; ; MACRO LIBRARY CALLSY; ; EQUATED SYMBOLSI; ; IMPURE DATA AREA; ; PURE DATA AREA;O  O;U;+; SUBROUTINE .EVSCANH8; THIS ROUTINE SCANS THE VOLUME SET CONTROL BLOCK (VSCB)7; CHAIN FOR A BLOCKED PROCESS WHICH IS EITHER TIMED OUT7; OR MAY NOW BE UNBLOCKED.;P; CALL: $CALL .EVSCANE;S ; OUTPUTS: ; C-BIT SET; NO PROCESS FOUNDE;; C-BIT CLEAR5; R4 AND .VSCBA = VSCB ADDR OF THE "BLOCKED PROCESS"-;-;-; .ENABL LSB .EVSCAN::C) LET R4 := .VSCB ;GET ADDR OF 1'ST VSCBI WHILE RESULT IS NE ;SCAN LOOPI. LET R0 :== V.PSTA(R4) ;GET PROCESS STATUS* IF RESULT IS LT ;IF PROCESS IS BLOCKED ;AND HAS TIMED OUTV LET R0 :== R0 R.ROTATE 1$ ON.NOERROR ;AND IF NOT IS THE% $CALL .SETIO ;UNIT ONLINE ANDL $CALL .RDSTS ;AT BOT ON.NOERROR# ;FLAG THAT IT MAY BE UNBLOCKED) LET V.PSTA(R4) :== - V.PSTA(R4) ELSEH IF #TP.RWD!TP.SEL NOT.SET.IN ..IOST+2 ;IF NOT OFFLINE BUT NOT AT00;pAqGvDATADATADATADATADATADATADATA BOT3 MTQIO IO.RWD ;REWIND DRIVE MUST START AT BBOTC END BR 10$ ;GO TRY NEXT ENDC END% LET .VSCBA := R4 ;UPDATE .VSCBAK ;FLAG SUCCESS- RETURN NOERROR ;AND RETURN R4=VSCB ADDR  ENDR 10$: ;ELSE:E& LET R4 := V.NXT(R4) ;GET NEXT VSCB END ;AND LOOPS ;NONE FOUND -- FLAG FAILURE RETURN ERROR .DSABL LSB .END LET V.PSTA(R4) :== - V.PSTA(R4) ELSEH IF #TP.RWD!TP.SEL NOT.SET.IN ..IOST+2 ;IF NOT OFFLINE BUT NOT AT8 $BEGIN MEXPDT 0001 < EXPIRATION DATE CHECKING ROUTINE >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 20-FEB-75; ;; THIS MODULE CONTAINS THE EXPIRATION DATE CKECKING ROUTINEG; ; ; MACRO LIBRARY CALLSU;  .MCALL GTIM$SM;O; EQUATED SYMBOLSD; ; IMPURE DATA AREA; ; WORK AREAQ;MWORK:P .BLKW 2U; ; PURE DATA AREA;  0 .SBTTL .EXPDT -- EXPRIATION DATE EXPRIED CHECK;H;+E; THIS ROUTINE CHECKS FOR THE EXPRIATION DATE OF A FILE BEING EXPRIEDA;Q; CALL: $CALL .EXPDT ; ; INPUTS: HDR1 IN .LAB1Y;M%; OUTPUTS: C-BIT CLEAR - FILE EXPRIED3; C-BIT SET - FILE NOT EXPRIED AND .IOSTS = IE.EXPM;L;- .ENABL LSB.EXPDT:: PUSH R0,R1,R2N5 LET R2 := R4 + #V.CDAT ;SAVE CURRENT DATES IN VSCBM/ PUSH (R2)+,(R2)+,(R2)+,(R2)+,R2 ; AND POINTER" IFB #VM.EXC NOT.SET.IN V.MOU(R4)& $CALL .GTDAT ;GET DATE INTO VSCB0 LET SP := SP - #16. ;GET WORK AREA IN STACK LET R0 := SP$ GTIM$S R0 ;GET THE TODAYS DATE3 $CALL .DAT5J <#WORK,SP> ; CONVERT TO RAD50 DATE ' LET SP = SP + #16. ;CLEAN UP STACKB LET R0 := #WORKE* IF (R0)+ HIS V.EDAT(R4) ;COMPAIR DATES$ BNE 10$ ;IF YEAR GT OK TO GO CMP @R0,V.EDAT+2(R4)( BHIS 10$ ;YEAR THE SAME DAY => OK ENDM1 SETERR IE.EXP < EXPRIATION DATE NOT EXPIRED > BR 20$ ENDE;N10$: ;REF TAG CLCT;;20$: ;REF TAG8 POP R2,-(R2),-(R2),-(R2),-(R2) ; RESTORE DATES TO VSCB POP R2,R1,R0 RETURN;T .ENDAYS DATE3 $CALL .DAT5J <#WORK,SP> ; CONVERT TO RAD50 DATE ' LET SP = SP + #16. ;CLEAN UP STACKB LET R0 := #WORKE* IF (R0)+ HIS V.EDAT(R4) ;COMPAIR DATES$ BNE 10$ ;IF YEAR GT OK TO GO CMP @R0,V.EDAT+26 $BEGIN MEXTND 0001 < EXTEND QI/O FUNCTION PROCESSOR >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.7; COPYRIGHT (C) 1975, BY DIGITAL EQUIPMENT CORPORATION; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;C;E; $VERSIONI; ; E.H. MARISON 11-FEB-75; 9; THIS MODULE IMPLEMENTS THE EXTEND QI/O FOR ANSI MAGTAPEC; 00GxMyS0E ; ; MACRO LIBRARY CALLSN; ; EQUATED SYMBOLS ; ; IMPURE DATA AREA; ; PURE DATA AREA;I.EXTND::9 LET .IOSTS+2 := .IOSTS+2 +1 ; SAY WE EXTENDED ONE BLOCK  RETURN ; AND RETURN;  .ENDWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.7; COPYRIGHT (C) 1975, BY DIGITAL EQUIPMENT CORPORATION; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;C;E; $VERSIONI; ; E.H. MARISON 11-FEB-75; 9; THIS MODULE IMPLEMENTS THE EXTEND QI/O FOR ANSI MAGTAPEC; A $BEGIN MHEADB 0002 < "FCS" COMPATABLE HEADER & STATISTICS BLOCK>F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; 8; THIS MODULE CONTAINS THE FCS INTERFACE DATA STRUCTURES.; "THE STATISTICS BLOCK AND THE HEADER BLOCK".; ; ; MACRO LIBRARY CALLSD; ; EQUATED SYMBOLSI; ; IMPURE DATA AREA; ;P;T; THE STATISTICS BLOCK;T.STATC::' .WORD 0,0 ;ALWAYS ZERO'S FOR MAGTAPE 'C.SIZE==.-.STATC ;INDEX TO SIZE WORDSI .WORD 0,0C5C.ACLK==.-.STATC ;INDEX TO COUNTS (ACCESS AND LOCK) ' .WORD 0 ;ACCESS COUNT AND LOCK COUNTE; ;E; '; MAGTAPE "FCS" COMPATABLE HEADER BLOCK ;.;R.HEADR:: .BYTE S.MHDR/2 ;IDENT OFFSET" .BYTE S.MHDR+S.MID/2 ;MAP OFFSET'.HFSQ:: .WORD 0 ;FILE SEQ # (FILE # )O..HFSC:: .WORD 0 ;FILE SECTION # (FILE SEQ #) .WORD 401 ;STRUCTURE LEVEL '.HOWN:: .WORD 0 ;OWNER UIC (FROM MVL)(.HPRO:: .WORD 0 ;PROTECTION (FROM MVL) .BYTE 0 ;USER CHAR- .BYTE 0 ;SYSTEM CHARO.HFATT::.HRTYP:: .BYTE 0 ;RECORD TYPE$.HRATT:: .BYTE 0 ;RECORD ATTRIBUTES.HRSIZ:: .WORD 0 ;RECORD SIZE& .REPT 32.-4. ;REST OF SECTION = 0'S .BYTE 0  .ENDM.;R!; SIZE OF HEADER AREA (SECTION 0) ;SS.MHDR=.-.HEADRR;M; IDENTIFICATION AREA:;..HFNM:: .BLKB 6 ;FILE NAME.HFTY:: .BLKB 2 ;FILE TYPE&.HFVR:: .BLKB 2 ;FILE VERSION NUMBER*.HRDT:: ;REVISION # , DATE AND TIME = 0 .REPT 2.+7.+6. .BYTE 0P .ENDM .HCDT:: .BLKB 7 ;CREATION DATE .REPT 6 ;TIME = '0A .BYTE '0 .ENDM:".HEDT:: .BLKB 7 ;EXPRIATION DATE .BYTE 0 ;PAD BYTE;; TAPE HEADER/TRAILER LABELS; !.HLAB1:: ;LABELS ARE 80. BYTES .BLKB 80. 0.HLAB2:: ;USER MUST VERIFY VALIDITY OF LAB #2 .BLKB 80.E;R; SIZE OF ID AREAI;A S.MID=.-.HFNM:;.; MAP AREA --- NULL MAP.HMAP::2 .REPT 10. .BYTE 0L .ENDML;E; SIZE OF MAP AREA; S.MMAP=.-.HMAP; ; ; SIZE OF HEADER BUFFER.; S.MHDB==.-.HEADR;H .ENDBLKB 7 ;CREATION DATE .REPT 6 ;TIME = '0A .BYTE '0 .ENDM:".HEDT:: .BLKB 7 ;EXPRIATION DATE .BYTE 0 ;PAD BYTE;; TAPE HEADER/TRAILER LABELS; !.HLAB1:: ;LABELS ARE 80. BYTES .BLKB 80. 0.HLAB2:: ;USER MUST VERIFY VALIDITY OF LAB #2 .BLKB 80.E;R; SIZE O) $BEGIN MLABDF 0004 < LABEL DEFINITIONS >DF; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY 0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERNG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) O00SYvDATADATADATADATADATADATADATANLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; E; THIS MOUDULE CONTAINS THE OFFSET DEFINITION FOR ANSI MAGTAPE LABELS); ; JOHN R. COVERT 13-APR-79&; JRC013 -- ADD DEFINITION OF FSZ AREA;T; ; EQUATED SYMBOLS ;I .ASECT; ;DEFINE THE VOLUME LABEL OFFSETS;  .=0( H.VOL1:: .BLKB 4. ;LABEL ID AND NUMBER H.VID:: .BLKB 6. ;VOLUME ID' H.VACC:: .BLKB 1. ;VOLUME ACCESS BYTE7% H.VRS1:: .BLKB 26. ;RESERVED AREA 1 % H.VOID:: .BLKB 14. ;VOLUME OWNER IDP% H.VRS2:: .BLKB 28. ;RESERVED AREA 2$+ H.VLSV:: .BLKB 1. ;LABEL STANDARD VERSION ASSUME .,80.N;N&; DEFINE THE HEADER/TRAILER #1 OFFSETS;B .=0( H.HDR1:: .BLKB 4. ;LABEL ID AND NUMBER H.FID:: .BLKB 17. ;FILE IDT H.FSID:: .BLKB 6. ;FILE SET ID( H.SECN:: .BLKB 4. ;FILE SECTION NUMBER) H.SEQN:: .BLKB 4. ;FILE SEQUENCE NUMBERN& H.GENN:: .BLKB 4. ;GENERATION NUMBER. H.GENV:: .BLKB 2. ;GENERATION VERSION NUMBER" H.CDAT:: .BLKB 6. ;CREATION DATE$ H.EDAT:: .BLKB 6. ;EXPIRATION DATE$ H.FACC:: .BLKB 1. ;FILE ACESS BYTE H.BLKC:: .BLKB 6. ;BLOCK COUNT! H.SYSC:: .BLKB 13. ;SYSTEM CODE H.RS1:: .BLKB 7. ;RESERVEDO ASSUME .,80.0;H&; DEFINE THE HEADER/TRAILER #2 OFFSETS;F .=0( H.HDR2:: .BLKB 4. ;LABEL ID AND NUMBER" H.RECF:: .BLKB 1. ;RECORD FORMAT! H.BLKL:: .BLKB 5. ;BLOCK LENGTH " H.RECL:: .BLKB 5. ;RECORD LENGTH+ H.SYSD:: .BLKB 35. ;SYSTEM DEPENDENT AREAK" H.BOFF:: .BLKB 2. ;BUFFER OFFSET H.RS2:: .BLKB 28. ;RESERVED ASSUME .,80.K;.A; DEFINE OFFSETS INTO THE SYSTEM DEPENDENT AREA IN HDR2/EOF2/EOV2 ;K); ALL REFERENCES ARE RELATIVE TO (H.STSD)Y;M .=0% H.SYR1:: .BLKB 21. ;RESERVED AREA 1M& H.CCHR:: .BLKB 1. ;CONTROL CHAR CODE0 H.LFSZ:: .BLKB 3. ; FIXED CONTROL SIZE ;JRC013/ H.STR2:: .BLKB 10. ; RESERVED AREA #2 ;JRC013T ASSUME .,35. ;**-1K;N .ENDH.RECL:: .BLKB 5. ;RECORD LENGTH+ H.SYSD:: .BLKB 35. ;SYSTEM DEPENDENT AREAK" H.BOFF:: .BLKB 2. ;BUFFER OFFSET H.RS2:: .BLKB 28. ;RESERVED ASSUME .,80.K;.A; DEFINE OFFSETS INTO THE SYSTEM DEPENDENT AREA IN HDR2/EOF2/EOV2 ;K); ALL REFERENCES ARE RELATIVE TO (H.STSD)Y;M .=0% H.SYR1:: .BLKB 21. ;RESERVED AREA 1M& H.CCH2 $BEGIN MLSTFL 0001 < LAST FILE CHECKING ROUTINE >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 20-FEB-75; H; THIS MODULE CONTAINS THE LAST FILE CHECK ROUTINE TO ALLOW WRITE ACCESS; ; ; MACRO LIBRARY CALLSE;  .MCALL GTIM$SE; ; EQUATED SYMBOLS ; ; IMPURE DATA AREA; ; WORK AREAP;TWORK:U .BLKW 2O;B; PURE DATA AREA;  R/ .SBTTL .LSTFILE -- LAST FILE ON VOL SET CHECKO;U;+7; THIS ROUTINE CHECKS TO SEE IF THE CURRENT FILE IS THEI=; LAST FILE ON THE VOLUME SET, AND IF SO POSITIONS FOR APPENDM;E; CALL: $CALL .LSTFILEE*; INPUTS: CURRENT PROCESS TAPE POSITIONED; TO DESIRED FILED; 2; OUTPUTS: C-BIT CLEAR TAPE POSITIONED FOR AP00Y_0E PEND&; WITH CURRENT BLOCK COUNT IN V.BLKC; "; C-BIT SET FILE IS NOT THE LAST'; AND TAPE POSITIONED BEFORE THE NEXTE; FILE'S HEADERS.K;O;- .LSTFILE::2 LET V.PSTA(R4) :== #VP.POS ;SET POSITIONING MODE WHILEB V.TPOS(R4) NE #1R% TMSPACE #1 ;POSITION TO TRAILERE$ LET V.TPOS(R4) :== V.TPOS(R4) -1 ENDI $CALL .RDLB1 $CALL .NXHDR;AA; WE NOW HAVE EOF OR V 1 IN .LAB1 AND WE ARE POSITION JUST BEFORE &; THE NEXT FILE POSITION ON THE VOLUME;  IF .LAB1 EQ #"EO IF .LAB1+2 EQ #"F1 PUSH R3,R4,R5 > LET R3 := R4 + #V.BLKC ;GET BLOCK COUNT OF FILE SECTION) LET R4 := #6. ! R5 := #.LAB1+H.BLKCS $CALL .DD2CT POP R5,R4,R3 $CALL .RDLB1% ON.ERROR ANDB ..IOST EQ #IE.EOFE ;WE ARE AT THE END, TMSPACE #-3 ;SO POSITION FOR APPEND LET V.TPOS(R4) :== #21/ RETURN NOERROR ;AND EXIT WITH NO ERROR ENDE5 LET .MTDPB+M.TPRM := #-1 ;NOT AT END REPOSITION  MTQIO IO.SPB LET V.TPOS(R4) :== 0 ELSE IF .LAB1+2 EQ #"V13 LET V.SECN(R4) := V.SECN(R4) +1 ;BUMP SEC #S/ $CALL .RQNXT ;GO GET NEXT FILE SECTIONS- $CALL .VRDOP ;MAKE SURE CORRECT FILE BR .LSTFILE ;START OVER ENDI END  ENDW% RETURN ERROR ;AND EXIT WITH ERROR;;P .END APPEND LET V.TPOS(R4) :== #21/ RETURN NOERROR ;AND EXIT WITH NO ERROR ENDE5 LET .MTDPB+M.TPRM := #-1 ;NOT AT END REPOSITION  MTQIO IO.SPB LET V.TPOS(R4)< $BEGIN MMOINT 0006 < INITIALIZATION MODULE FOR MOUNT QI/O >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYL0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER G; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDO@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75;S%; ELLEN R SIMICH 21-JAN-76 27-FEB-76O; B; THIS MODULE SETS UP FOR THE PROCESSING OF THE MOUNT COMMAND LINE; ; ; MACRO LIBRARY CALLS ; ; EQUATED SYMBOLS; ; IMPURE DATA AREA; ; PURE DATA AREA;O B;T;+1; THIS MODULE IS CALLED WITH THE NEWLLY ALLOCATEDIA; VSCB ADDR IN R0. IT CONNECTS THE VSCB INTO THE CHAIN OF VSCB'S7>; AND THEN RETRIVES THE MOUNT COMMAND LINE FROM THE MOUNT TASK; AND SETS UP TO PARSE THE LINER;M.MOINT:: ASSUME V.TCNT,0- LET .VSCBA := R0 ! @R0 := #1 ;INIT TRAN CNT2/ LET V.NXT(R0) := .VSCB ;HOOK VSCB INTO CHAINO LET .VSCB := R0 , LET V.PSTA(R0) :== #VP.MOU ;SET MOUNT MODE .IF DF R$$11D;E; CLEAR PARSER VARIABLES;  LET $FLAGS := 0 ! $UNITS := 0B( LET $UIC := 0 ! $PRO := 0 ! $VMOU := 0@ LET $MASK := #CH.OFF!CH.UNL ;SET U.CH MASK FOR OFF LINE CHHECK; ; BRING IN THE COMMAND LINER;I LET R3 := R3 +1 ! R2 := 0O, LET R2 :== R2 SET.BY (R3)+ ;GET BYTE COUNT3 IF RESULT IS EQ THEN R2 := #512. ; 0 = 512. BYTESA' LET R4 := #.MCMBF ;WHERE TO PUT DATA ;BRING IN CMD LINE AND SET" ;R3 TO BYTE COUNT FOR .TPARS $CALL .BLXI O ON.NOERROR LET R1 := 0 ;FLUSH SPACESV ENDS .IFF CLCA .ENDC  RETURN; .ENDIC := 0 ! $PRO := 0 ! $VMOU := 0@ LET $MASK := #CH.OFF!CH.UNL ;SET U.CH MASK FOR OFF LINE CHHECK; ; BRING IN THE COMMAND LINER;I LET R3 := R3 +1 ! R2 := 0O, LET R2 :== R2 SET.BY (R3)+ ;GET BYTE COUNT3 IF RESULT IS EQ THEN R2 := #512. ; 0 = 512. BYTESA' LET R4 := #.MCMBF ;WHERE TO PUT DATA ;BRING IN CMD LINE A00evDATADATADATADATADATADATADATA, $BEGIN MMOPAR 0016 < MOUNT COMMAND PARSER >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYE0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED @; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 06-MAR-75;S; ELLEN R SIMICH 21-JAN-76; G; THIS MODULE PARSES THE MOUNT COMMAND LINE AND SETUP INCORE DATA STRU.E; ; ; MACRO LIBRARY CALLSD; # .MCALL ISTAT$,STATE$,TRAN$,FHDOF$  .IF DF R$$11DT" FHDOF$ ;DEFINE PROTECTION BITS;S; EQUATED SYMBOLSY; ; IMPURE DATA AREA; $RESET: .WORD 0 ;STACK RESET VALUE-STDACP: .WORD 0 ;STD ADDR OF ACP PROCESSORI;N; DUMMY MVL NODE; DUMMVL: .BLKB S.MVL;Y;M; PURE DATA AREA;F C$ .SBTTL STATE TABLE FOR MOUNT PARSE+ ISTAT$ $MOSTB,$MOKTB ;DECLEARE STATE AND- ;KEYWORD TABELSA;T; READ DEVICE NAME(S)N;E STATE$ START TRAN$ $ANY,,SETDV1 STATE$ TRAN$ $ANY,,SETDV2 STATE$ TRAN$ '(,DEVLST ;MULTI UNITST TRAN$ $NUMBR,VOL,UNITE TRAN$ ':,VOL1,UNIT0E;Y; READ THE VOLUME LABEL(S); STATE$ VOL TRAN$ ': STATE$ VOL1% TRAN$ '(,VOLLST ;MULTI VOLUME SPECC# TRAN$ '/,OPTS1 ;NO VOL SPECIFIEDM TRAN$ $STRNG,OPTS,VOLNAM;E!; SCAN OF OPTIONS AND END OF LINET;E STATE$ OPTSE# TRAN$ $EOS,$EXIT ;AT END GET OUTT TRAN$ '/,OPTS12 TRAN$ 0,$EXIT ; IF NULL THEN AT END SO GET OUT STATE$ OPTS1 TRAN$ "UIC",UIC TRAN$ "PRO",PROA TRAN$ "DENS",DEN TRAN$ "ACP",ACP  TRAN$ "OVR",OPTS,SETOVRM TRAN$ "OVRFSID",OPTS,SETFSON TRAN$ "OVREXP",OPTS,SETEXP TRAN$ "NOLAB",OPTS,SETULBR TRAN$ "BYPASS",OPTS,SETBYP .IF DF,IAS TRAN$ "RT",OPTS,SETRTN TRAN$ "GBL",OPTS,SETGBLE .ENDCN;S; UICT;O STATE$ UIC TRAN$ '= STATE$ TRAN$ '[ STATE$ TRAN$ $NUMBR,,SETGNX STATE$ TRAN$ <',> STATE$ TRAN$ $NUMBR,,SETPN  STATE$ TRAN$ '],OPTST;T; PRO - PROTECTION;N STATE$ PRO TRAN$ '= STATE$ TRAN$ '[,,IGROUP STATE$ SPRO  TRAN$ '],OPTS,ENDGRP TRAN$ <',>,SPRO,NXGRPP TRAN$ 'R,SPRO,SETRPR TRAN$ 'W,SPRO,SETWPN TRAN$ 'E,SPRO,SETEP TRAN$ 'D,SPRO,SETWPE;P/; NOTE: W AND D GIVE TOTAL ACCESS TO THE VOLUME ;L;P ; DENSITY;E STATE$ DEN TRAN$ '= STATE$ TRAN$ "1600",OPTS,SET16N TRAN$ "800",OPTS,SET8N;R"; ACP -- WE JUST VERIFY THE SYNTAX;T STATE$ ACP TRAN$ '= STATE$ TRAN$ $RAD50,OPTST; ; DEVICE LISTN;N STATE$ DEVLST  TRAN$ $NUMBR,,UNIT STATE$ TRAN$ <',>,DEVLST  TRAN$ '),VOL;N ; VOLUME LIST';S STATE$ VOLLSTN TRAN$ $STRNG,,VOLNAM STATE$ TRAN$ <',>,VOLLSTR TRAN$ '),OPTS ;S; END OF STATE TABLE;  STATE$;T A/ .SBTTL .MOPAR -- MOUNT COMMAND PARSER ROUTINET .PSECT MMOPAR ;;+;; THIS ROUTINE PARSES THE MOUNT COMMAND LINE AND BUILDS THER,; INCORE DATA STRUCTURS FOR THE MVL AND UVL.;; THE VSCB HAS BEEN ALLOCATED AND ITS ADDR IS IN .VSCBA THEE6; REGISTERS ON ENTRY ARE SET UP FOR PARSING EXCEPT FOR#; THE KEYWORD TABLE AND START STATEN;);-.MOPAR::. LET RESET := SP ;SAVE STACK PTR FOR ERRORS ;IN ACTION ROUTINES'+ $CALL .TPARS A BCS SYNTAX RETURN;; DEVERR: LET .IOSTS+2 := #ME.BDV3;;;;;;;; *** ERROR IE.ABO < BAD DEVICE NOT IN PUD >I BR ERR; ;N SYNTAX: LET .IOSTS+2 := #ME.SYN);;;;;;;; *** ERROR IE.ABO < SYNTAX ERROR>;H;S$ERR: LET SP := RESET 00e0E ;RESET STACK ERROR IE.ABO < ABORT MOUNT >;Y E% .SBTTL MOUNT PARSER ACTION ROUTINESE;R;A,; SET FIRST CHARACTER IN DEVICE NAME -- $DEV;ESETDV1: LET $DEV :== .PCHAR RETURN; %; SET SECOND CHARACTER IN DEVICE NAME<;RSETDV2: LET $DEV+1 :== .PCHAR RETURN;U; UNIT 0 ACTION ROUTINE.;TUNIT0: LET .PNUMB := 0*;E; FALL THRU TO UNITI;NUNIT:U;I); FIND UNITS PUD AND HOOK INTO VSCB'S MVL=;E .IF DF R$$11D* PUSH R0,R3,R4Y! LET R2 := .PUDBA ! R4 := .VSCBA: WHILE R2 LO .PUDEA' IF @R2 EQ $DEV ANDB 2(R2) EQ .PNUMB;S#; FOLLOW THE INDIRECT CHAIN FOR PUDR;A WHILE R2 NE U.RP(R2) LET R2 := U.RP(R2) ENDE;=; MAKE SURE UNIT IS OFF LINE;O# IFB $MASK NOT.SET.IN U.CH(R2)D4 LET .IOSTS+2 := #ME.OVM ;OTHER VOLUME ONLINE BR ERR ENDE3 IF $MASK EQ #CH.OFF!CH.UNL ;IS THIS 1'ST TIME9 LET STDACP := U.ACP(R2) ; YES SAVE ACP'S STD ADDRF ELSE LET U.ACP(R2) := STDACPA# LET U.CH+1(R2) :== U.CH(R2)A END23 LET U.CH(R2) :== #CH.NAT!CH.NDC!CH.LAB!CH.UNLRJ LET $MASK :== $MASK CLEARED.BY #CH.UNL ;AVOID RACE AND NOT 1'ST TIME LET R0 := R4 + #V.MVL  IF @R0 IS NE WHILE @R0 IS NE. LET R0 := @R0 + #M.NXT ENDO END 0 LET $UNITS :== $UNITS +1 ;BUMP UNIT COUNT. LET @R0 := R2 + #U.VA+2 ;CONNECT TO MVL+ LET U.VA(R2) := R4 ;CONNECT TO VSCBA. LET R0 := @R0 ! M.NXT(R0) := 0 ;END LIST/ LET M.UCB(R0) := R2 ;CONNECT MVL TO PUDN/ LET V.RVOL(R4) :== $UNITS ;SET REL VOL #C$ $CALL .SWPID ;MAKE UVL ENTRY ;FOR UNIT AND ;SETUP M.STAT AND M.RVOLE POP R4,R3,R0 RETURN ;EXIT  ENDL, LET R2 := R2 + #U.SZ ;BUMP TO NEXT PUD END ;N; DEVICE IS NOT IN PUD$ BR DEVERR ;GIVE NO DEVICE ERROR .ENDC ; ; ; VOLUME NAME ACTION ROUTINE;VOLNAM: - LET $VOLN :== $VOLN +1 ;BUMP VOL NAM COUNT0 PUSH R0,R3,R40* LET R0 :== $VOLN ! R4 := .VSCBA ;TRY MVL $CALL .SCMVL ON.ERROR ;SETUP FOR DUMMY MVL) LET V.RVOL(R4) :== R0 ! R0 := #DUMMVLE& $CALL .SWPID ;GET UVL NODE SPACE END ;T?; R0 IS NOW POINTING AT EITHER THE DUMMY MVL NODE OR A REAL ONEN=; WE WILL NOW STORE THE VOLUME NAME GIVEN IN THE "MVL NODE'S" !; UVL NODE VIA THE M.VIDP POINTER ;I# LET R1 := M.VIDP(R0) ! PUSH := R1 LET M.STAT(R0) :== #MS.VER$ REPEAT R2 := #6. ;PAD WITH SPACES LET (R1)+ :== <<<<#<' >>>>>, END( LET R1 := POP ! R2 := 0 ! R0 := .PSTPT" WHILE R2 LT .PSTCN AND R2 NE #6.% LET (R1)+ :== (R0)+ ! R2 := R2 +1) END  POP R4,R3,R0 RETURN;S;D; SET UIC ACTION ROUTINESN;SETGN: LET $UIC+1 :== .PNUMBR% LET $FLAGS := $FLAGS SET.BY #MO.UICE BR TSPPN; SETPN: LET $UIC :== .PNUMBVTSPPN: IFB .PNUMB+1 IS NESYN1: ;REF TAG% JMP SYNTAX ;ERROR NUMBER TO BIG  ENDT RETURN;S; SET PROTECTION;#GRCNT: .BLKW 1C;IGROUP:R4 LET GRCNT := #4. ! $FLAGS := $FLAGS SET.BY #MO.PRO; ; NEXT GROUP; NXGRP: SEC ;FORCE ONES' LET $PRO := $PRO R.ROTATE 1 R.SHIFT 3+ LET GRCNT := GRCNT -10 BLT SYN1 ;ONLY FOUR GROUPS RETURN;N; SET READ ACCESS ;CSETRP:+ LET $PRO := $PRO CLEARED.BY #FP.RDV*10000E RETURN;F; SET EXTEND ACCESS TO VOLUME (CAN ONLY APPEND TO LAST FILE ON VOLUME); SETEP:+ LET $PRO := $PRO CLEARED.BY #FP.EXT*10000  RETURN;N!; SET WRITE (TOTAL ACCESS - RWED) ;K'TOTAL=FP.RDV!FP.WRV!FP.EXT!FP.DEL*10000$SETWP:$ LET $PRO := $PRO CLEARED.BY #TOTAL RETURN;:; END OF PROTECTION;EENDGRP: TST GRCNT  BNE SYN1 ;MUST SPEC ALL FOURT RETURN;Y; SET 1600 BPI;USET16:% LET $FLAGS := $FLAGS SET.BY #MO.160: RETURN;: ; SET 800 BPIB;FSET8:0) LET $FLAGS := $FLAGS CLEARED.BY #MO.160V RETURN;L; SET BYPASS LABEL PROCESSING); SETBYP: LET $VMOU :== #VM.BYP RETURN;X; SET NO LABEL PROCESSINGE;RSETULB: LET $VMOU :== #VM.ULB RETURN;F/; SET OVERRIDE VOLUME NAME SPECIFICATION NEEDED ;O,SETOVR: LET $FLAG00ejvDATADATADATADATADATADATADATAS := $FLAGS SET.BY #MO.OVR RETURN; ; SET OVERRIDE FILE SET ID CHECK;M+SETFSO: LET $VMOU :== $VMOU SET.BY #VM.FSCB RETURN;:#; SET OVERRIDE EXPRITION DATE CHECK6;+SETEXP: LET $VMOU :== $VMOU SET.BY #VM.EXCE RETURN;F;S .IF DF,IAS*SETRT: LET $FLAGS := $FLAGS SET.BY #MO.RT RETURN;;B,SETGBL: LET $FLAGS := $FLAGS SET.BY #MO.GBL RETURN .ENDCN;; .ENDCL .END :== #VM.ULB RETURN;F/; SET OVERRIDE VOLUME NAME SPECIFICATION NEEDED ;O,SETOVR: LET $FLAG7 $BEGIN MMOSAV 0004 < MOUNT PARSE RESULT SAVE ROUTINE >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYE0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERIG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75;S; ELLEN R SIMICH 21-JAN-76; A; THIS ROUTINE SAVE AND CHECK SOME OF THE REULTS OF THE CMD PARSES; ; ; MACRO LIBRARY CALLS ; ; EQUATED SYMBOLS; ; IMPURE DATA AREA; ; PURE DATA AREA;U ;R;+2; THIS ROUTINE SAVE THE $FLAGS WORD AND PROCESSESS; EXPLICIT UIC AND PROTECTIONUA; IT ALSO CHECKS OF VOLNAME OVERRIDE AND GIVES ERROR IF NECESSARYQ;M;- .IF DF R$$11D .MOSAV::! LET R2 := $FLAGS ! R5 := .IOPKT % LET R4 := .VSCBA ! V.STAT(R4) := R2% IFB #VM.ULB!VM.BYP NOT.SET.IN $VMOU - IFB $VOLN IS EQ AND #MO.OVR NOT.SET.IN R2H LET .IOSTS+2 := #ME.WRVM7 ERROR IE.ABO Y END  ENDU LET V.MOU(R4) :== $VMOUT IF #MO.PRO!MO.UIC SET.IN R2R3 LET R0 := V.MVL(R4) ;SCAN THRU MVL SET UIC/PROT WHILE RESULT IS NE2 IF #MO.PRO SET.IN R2 THEN M.PROT(R0) := $PRO1 IF #MO.UIC SET.IN R2 THEN M.UIC(R0) := $UIC LET R0 := M.NXT(R0). END  END: RETURN NOERROR .ENDC;  .ENDULB!VM.BYP NOT.SET.IN $VMOU - IFB $VOLN IS EQ AND #MO.OVR NOT.SET.IN R2H9 $BEGIN MMVLR 0002 < MOUNTED VOLUME LIST (MVL) ROUTINES >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; ?; ROUTINES WHICH SCAN AND PROCESS THE MOUNTED VOLUME LIST (MVL)N; ; ; MACRO LIBRARY CALLSS; ; EQUATED SYMBOLSH; ; IMPURE DATA AREA; ; PURE DATA AREA;  I2 .SBTTL ROUTINE .PICKU - PICK A UNIT FOR MOUNTING; ;+,; ROUTINE .PICKU -- PICK A UNIT FOR MOUNTING;N0; THIS ROUTINE SCANS THE MVL FOR A UNIT TO MOUNT/; THE REQUESTED VOLUME (CURRENT V.RVOL IN VSCB)T:; WHEN THE UNIT IS FOUND THE UNIT IS UNLOADED. IN THE CASE9; WHERE THE UNIT IS NOT THE CURRENT UNIT THE CURRENT UNIT-?; IS REWOUND. THE UINT IS CHOSEN UPON THE FOLLOWING PRIORITIES00v|0E : ;L:; UNIT STATUS -- 1.) AT BOT 2.) REWINDING 3.) ALL OTHERS;3; AND WITHIN UNIT STATUS THE FOLLOWING RELATIONSHIPS3; OF THE VOLUME NOW MOUNTED ON THE UNIT "V" AND THE+$; REQUESTED VOLUME "RV" IS FOLLOWED:;N ; 1 > V < RVS ; V-1 > RVS; V = 1 ; V-1 = RVM;T; CALL: $CALL .PICKUE;U"; INPUTS: V.RVOL = REQUESTED VOL #; ; OUTPUTS: R0 = MVL NODE ADDRI(; V.UCB = M.UCB AND I/O DATA PATH SETUP$; UNITS HANDELED AS DESCRIBED ABOVE;D; NOTE: R1 IS DESTORYED ; ;-.PICKU::3 $CALL .PCKUN <#TP.BOT> ;SCAN MVL FOR UNIT AT BOTG ON.ERROR? $CALL .PCKUN <#TP.BOT!TP.RWD> ;TRY RWD OR BOT (AVOIDS RACE) ON.ERROR$ LET R0 := 0 ;TAKE ANYTHING ! $CALL .PCKUN S ON.ERROR$ $CRASH ENDR END  END$;L?; NOW HAVE THE VOL # OF THE VOLUME MOUNTED ON THE "PICKED" UNITR); IN R0 -- NOW SCAN THE MVL FOR THAT UNITO;T0 LET R0 := R0 CLEARED.BY #^C255. ;MASK GARBAGE $CALL .SCMVL IF M.UCB(R0) NE V.UCB(R4)C' MTQIO IO.RWD ;REWIND CURRENT UNIT  ENDT LET V.UCB(R4) := M.UCB(R0) $CALL .SETIO$ MTQIO IO.RWU ;UNLOAD PICKED UINT RETURN;R  .SBTTL SUBROUTINE .PCKUN;I;+6; THIS SUBROUTINE SCANS THE MVL FOR UNITS WHICH ARE IN7; THE STATE NOTED IN R0 AND OUTPUTS A UNIT # BASED UPONL6; THAT STATUS AND THE RELATIONSHIP BETWEEN THE MOUNTED.; VOULUME AND THE REQUESTED VOLUME (V.RVOL) AS; STATED IN .PICKU; ; CALL: $CALL .PCKUN;;K+; INPUTS: R0 = STATE OR 0 WHICH IS ANY UNIT. ; V.RVOL ;TB;OUTPUTS: C-BIT CLEARED R0 = VOL # OF MOUNTED VOLUME (IN LOW BYTE)"; C-BIT SET R0 = -1 NO UNIT FOUND;;; NOTE R1 IS DESTOYEDE;-.PCKUN:: PUSH V.UCB(R4),R2,#-1 LET R1 := V.MVL(R4)N WHILE RESULT IS NE LET V.UCB(R4) := M.UCB(R1) $CALL .SETIO $CALL .RDSTS BEGIN BLOCKA' IF R0 IS EQ OR R0 SET.IN ..IOST+2T* LET R2 :== M.RVOL(R1) -1 ;R2 = V-1* IFB R2 IS NE ANDB R2 LE V.RVOL(R4)$ IFB R2 GT (SP) THEN TOP :== R2 +1 LEAVE BLOCK ENDR IFB R2 GT V.RVOL(R4)8 IFB R2 GE (SP) ANDB (SP) GT V.RVOL(R4) ORB (SP) IS MI LET TOP :== R2 +1 LEAVE BLOCK END ENDK$ IFB R2 IS EQ ANDB (SP) IS MI LET TOP :== R2 +1 LEAVE BLOCK ENDC) IFB (SP) IS MI THEN TOP :== R2 +1C END END ; ; GET NEXT NODE IN MVL AND LOOP+; .IF DF R$$11M= ASSUME M.NXT,0 LET R1 := @R1  .IFF LET R1 := M.NXT(R1)  .ENDCT END ;1+; GET RESULT IN R0 AND RESTORE R2 AND V.UCB2;  POP R0,R2,V.UCB(R4)E $CALL .SETIO% RETURN R0 ;SET C -BIT BASED ON R0T;: R .SBTTL SUBROUTINE .SCMVL;;+8; SUBROUTINE - .SCMVL SCANS THE MVL FOR THE VOL # NOTED; IN R0.; ; CALL: $CALL .SCMVLN; ; INPUTS: R0 = VOL # TO SCAN FOR;2+; OUTPUTS: C-BIT CLEARED R0 = MVL NODE ADDR .; C-BIT SET R0 NOT ALTERED AND VOL NOT IN MVL; ;-.SCMVL:: PUSH R1: LET R1 := V.MVL(R4) BEGIN BLOCK  WHILE RESULT IS NE IFB R0 EQ M.RVOL(R1) LET R0 := R1 CLC  LEAVE BLOCK ENDT .IF DF R$$11M  ASSUME M.NXT,0 LET R1 := @R1T .IFF LET R1 := M.NXT(R1)R .ENDC. END  SECL END R POP R1 RETURN;. .END; ; INPUTS: R0 = VOL # TO SCAN FOR;2+; OUTPUTS: C-BIT CLEARED R0 = MVL NODE ADDR .; C-BIT SET R0 NOT ALTERED AND VOL NOT IN MVL; ;-.SCMVL:: PUSH R1: LET R1 := V.MVL(R4) BEGIN BLOCK  WHILE RESULT IS NE IFB R0 EQ M.RVOL(R1) LET R0 := = $BEGIN MNXHDR 0003 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S00|DATADATADATADATADATADATADATA COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; C; ROUTINE TO POSITION CURRENT UNIT TO PICKUP TNE NEXT HDR LABEL SETC; ; ; MACRO LIBRARY CALLSE; ; EQUATED SYMBOLSI; ; IMPURE DATA AREA; ; PURE DATA AREA;I ;I;+0; THIS ROUTINE POSITIONS THE CURRENT UNIT TO THE<; NEXT HEADER LABEL SET SO THAT THE NEXT READ CAN PICKUP THE ; FIRST LABEL ;I9; ON TAPE WHICH IS MOUNTED AS UNLABELED THIS ROUTINE WILLOE; ALWAYS SPACE FORWARDS ONE TAPE MARK, AND UPDATES THE FILE POSITION.M;; CALL: $CALL .NXHDR; ; INPUTS: CURRENT PROCESS"; OUTPUTS: C-BIT BASED UPON .IOSTS;T; ALL REGISTERS ARE PERSERVEDC; ;-.NXHDR::;R2; SETUP FOR TAPE POSITIONING -- INIT .IOSTS TO A 1=; R0 = PTR TO I/O STATUS BLOCK AND R1 = PTR TO CURRENT V.TPOST;S PUSH R0,R1' LET R0 := #..IOST ! .IOSTS := #IS.SUCA LET R1 := R4 + #V.TPOS;E BEGIN BLOCK IFB #VM.ULB SET.IN V.MOU(R4)% LET (R1) :== #1 ;UNLABEL TAPES7 LET V.SEQN(R4) := V.SEQN(R4) +1 ! V.SECN(R4) := 0I ;UPDATE FILE POSITIONR ENDN WHILEB (R1) IS NE LET (R1) :== (R1) - #1 TMSPACE #1I3 ON.ERROR ANDB (R0) NE #IE.EOT ;NORMAL ERROR ?  ;NO SET .IOSTS . LET .IOSTS := (R0)+ ! .IOSTS+2 := (R0) LEAVE BLOCK ;AND EXITT ENDH END I; END BLOCKI POP R1,R0  RETURN .IOSTSS;E .ENDN BLOCK IFB #VM.ULB SET.IN V.MOU(R4)% LET (R1) :== #1 ;UNLABEL TAPES7 LET V.SEQN(R4) := V.SEQN(R4) +1 ! V.SECN(R4) := 0I ;UPDATE FILE POSITIONR ENDN WHILEB (R1) IS NE LET (R1) :== (R1) - #1 TMSPACE #1I3 8 $BEGIN MPOSDT 0007 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 13-FEB-75; ELLEN R SIMICH 12-APR-76; M; THIS ROUTINE POSITIONS THE CURRENT UNIT TO THE FIRST DATA RECORD VIA V.TPOSC; ; ; MACRO LIBRARY CALLSD; ; EQUATED SYMBOLSA; ; IMPURE DATA AREA; ; PURE DATA AREA;R O;B;+/; THIS ROUTINE WILL POSITION THE CURRENT VOLUMEO2; TO BEFORE THE FIRST DATA RECORD BASE UPON V.TPOS>; (FOR UNLABELED OR WRITE ACCESSED TAPE THIS ROUTINE IS A NOP);; CALL: $CALL .POSDT; ;-.POSDT::F IFB #VM.ULB NOT.SET.IN V.MOU(R4) AND #WI.RDV SET.IN V.WIND+W.CTL(R4) LET PUSH := 0-0 LET TOP :== V.TPOS(R4) ;GET CURRENT POSITION# IF RESULT IS NE ANDB (SP) NE #3O6 LET TOP := TOP - #3 ;PASS BEGINING OF DATA MUST. TMSPACE POP ;BACK SPACE OVER DATA AREA ELSE TST (SP)+ ;POP STACK ENDE+ TMSPACE #1 ;FORWARD SPACE TO IN FRONTR ; OF DATA FIELD0 LET V.TPOS(R4) :== #2 ;UPDATE TAPE POSITION END  RETURN NOERROR;L .END; ;-.POSDT::F IFB #VM.ULB NOT.SET.IN V.MOU(R4) AND #WI.RDV SET.IN V.WIND+W.CTL(R4) LET PUSH := 0-0 LET TOP :== V.TPOS(R4) ;GET CURRENT 000E 8 $BEGIN MPVHDR 0003 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; @; THIS ROUTINE POSITIONS THE CURRENT DRV TO PICKUP THE PRV HDR'S; ; ; MACRO LIBRARY CALLSS; ; EQUATED SYMBOLSH; ; IMPURE DATA AREA; ; PURE DATA AREA; ?; DRIVE SPACING TABLE BASED ON "CURRENT" TAPE POSITION (V.TPOS)S;POSTBL:A+ .BYTE 0 ;IF V.TPOS = 0 THEN WE ARE THEREO8 .BYTE -3 ;IF V.TPOS = 1 THEN WE ARE IN TRAILER LABELS6 .BYTE -2 ;IF V.TPOS = 2 THEN WE ARE IN DATA SECTION5 .BYTE -1 ;IF V.TPOS = 3 THEN WE ARE IN HDR SECTION;E O;;+3; THIS ROUTINE POSITIONS THE "CURRENT" TAPE UNIT TOS7; PICKUP THE PREVIOUS HEADER LABEL SET ON THE NEXT READ ;; IF WE ARE AT BOT OR ALREADY THERE THEN NO SPACING OCCURESA:; (ON UNLABLED TAPE WE BACKSPACE 1 TM THEN FORWARDSPACE IT; UNLESS AT BOT);N; CALL $CALL .PVHDRL; INPUTS: CURRENT PROCESS +; OUTPUTS: C-BIT SET ON ERRORS ELSE CLEARED=; ALL REGISTERS PERSERVED;S ; SIDE EFFECT V.TPOS SET TO ZERO;A;-.PVHDR:: BEGIN BLOCK PUSH R03" $CALL .RDSTS ;IS TAPE AT BOT ON.ERROR ;DON'T POSITIONING" IFB #VM.ULB SET.IN V.MOU(R4). LET R0 := #-1 ;UNLABELED TAPE BS 1 TM ELSE+ LET R0 :== V.TPOS(R4) ;LABELED TAPE3 LET R0 :== POSTBL(R0) ;GET # OF TM TO SPACEC IF RESULT IS EQN CLC ;FLAG NO ERROR1 LEAVE BLOCK ;IF ZERO THEN WE ARE THEREE END ENDS;S#; BACKSPACE THE # OF TM NOTED IN R0S;T TMSPACE R0 ON.NOERROR" $CALL .RDSTS ;AT BOT NOW? ON.ERROR  TMSPACE #1 ; NO FS 1 TMD END END  ENDV END BLOCKV7 LET V.TPOS(R4) :== #00 ;FORCE MOVE TO PERSERVE C-BIT POP R0 RETURN;  .END.TPOS(R4) ;LABELED TAPE3 LET R0 :== POSTBL(R0) ;GET # OF TM TO SPACEC IF RESULT IS EQN CLC ;FLAG NO ERROR1 LEAVE BLOCK ;IF ZERO THEN WE ARE THEREE END ENDS;S#; BACKSPACE THE # OF TM NOTED IN R0S;T TMSPACE R0 ON.NOERROR" $CALL .RDSTS ;AT BOT NOW? ON.ERROR  TMSPACE #1 ; NO FS 1 TMD END END  ENDV END BLOCKV7 LET V.TPOS(R4) :== #006 $BEGIN MRDHDR 0002 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; E.H. MARISON 10-FEB-75; ?; THIS ROUTINE READS IN THE HEADER LABELS OF THE "CURRENT" FILEG00DATADATADATADATADATADATADATA; ; ; MACRO LIBRARY CALLSU; ; EQUATED SYMBOLSY; ; IMPURE DATA AREA; ; PURE DATA AREA; ;I;+6; THIS ROUTINE READS IN THE HDR1 AND HDR2 (IF PRESENT)-; OF THE CURRENT FILE INTO THE HEADER BUFFERSMB; TAPE POSITION IS UPDATE AS REGARDS FILE POSITION AND TM POSITION;58; IF THE TAPE IS UNLABELED THEN THIS ROUTINE WILL INSURE/; THAT THE TAPE IS POSITIONED RIGHT IN FRONT OF; THE LAST TAPE MARK.M;S; CALL: $CALL .RDHDR;R; OUTPUTS: C-BIT CLEAR AS ABOVE !; C-BIT SET ERROR NOTED IN .IOSTSA; ALL REGISTERS PERSERVEDQ;E;- .ENABL LSB.RDHDR::3 IFB V.TPOS(R4) IS NE ;POSITION TAPE IF WE NEED TOU $CALL .PVHDR ON.ERROR& LET .IOSTS := ..IOST ;NOTE ERROR BR 10$ ;AND RETURNE END  ENDT;S& $CALL .RDHLB ;READ IN HEADER LABELS 10$: RETURN .DSABL LSB .ENDTHIS ROUTINE WILL INSURE/; THAT THE TAPE IS POSITIONED RIGHT IN FRONT OF; THE LAST TAPE MARK.M;S; CALL: $CALL .RDHDR;R; OUTPUTS: C-BIT CLEAR AS ABOVE !; C-BIT SET ERROR NO9 $BEGIN MRQNXT 0005 < REQUEST THE NEXT VOLUME IN THE SET>F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75;S$; ELLEN R SIMICH 29-MAR-76 20-APR-76; ?; THIS PROCESS FINDS AND OR REQUESTS THE NEXT VOLUME IN THE SETC; ; ; MACRO LIBRARY CALLSD; ; EQUATED SYMBOLSA; ; IMPURE DATA AREA; ; PURE DATA AREA;R O;B;+G; ROUTINE TO REQUEST/FIND THE NEXT OR PREVIOUS VOLUME IN THE VOLUME SET ;P:; CONTROL IS RETURNED INLINE IS ALL IS READY OTHERWISE THE; PROCESS IS BLOCKED.O;; CALL: $CALL .RQNXTD;T; INPUTS: "CURRENT" PROCESSF;C4; OUTPUTS: IF ALL IS READY ROUTINE .RDLB1 IS INVOKED#; AND RETURNS ARE FOR THAT ROUTINEP;6-; IF ALL IS NOT READY THE PROCESS IS BLOCKEDN; R2 IS DESTROYED;;- .ENABL LSB.RQPRV::/ LET R0 :== V.RVOL(R4) -1 ;ERS PREVIOUS VOLUME$ LET R2 := #"PR ;ERS FLAG MESSAGE BR RQCOM.RQNXT:: LET R0 :== V.RVOL(R4) +1; '; UPDATE THE VSCB FOR THE "NEXT" VOLUMER; RQCOM:9 LET V.TPOS(R4) :== 0 ; RESET TAPE POSITION - ONLY VALUE  ; WE CAN TRUST!!T LET V.RVOL(R4) :== R0C% $CALL .SCMVL ; SCAN MVL FOR VOLUMEU ON.NOERROR ;FOUND IT& MTQIO IO.RWD ;REWIND CURRENT UNIT* $CALL .VRVOL ;VERIFY THE VOLUME LABEL ;(NOTE: PROCESS MAY BLOCK)A2 CALLR .RDLB1 ;GO READ IN THE LABEL AND RETURN ENDS;L6; VOLUME IS NOT MOUNTED SO REQUEST THAT IT BE MOUNTED;N $CALL .PICKU ;PICK A UNIT $CALL .SWPID ;SWAP ID'S$ $CALL .MOMSG ;ISSUE MOUNT MESSAGE% CALLR .BLOCK ;GO BLOCK THE PROCESSN;O .DSABL LSB .ENDAN TRUST!!T LET V.RVOL(R4) :== R0C% $CALL .SCMVL ; SCAN MVL FOR VOLUMEU ON.NOERROR ;FOUND IT& MTQIO IO.RWD ;REWIND CURRENT UNIT* $CALL .V- $BEGIN MRWVOL 0007 < REWIND THE VOLUME SET >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTIC00 0E E) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; -; THIS ROUTINE REWINDS THE CURRENT VOLUME SETG; ; ; MACRO LIBRARY CALLSO; ; EQUATED SYMBOLS,; ; IMPURE DATA AREA; ; PURE DATA AREA;Y ;I;+7; THIS ROUTINE REWINDS THE CURRENT VOLUME SET AND CAUSEL ; THE FOLLWING THINGS TO BE DONE; 1. ALL DRIVES ARE REWOUND 0; 2. IF ANY OF THE DRIVES HAVE RELVOL #1 MOUNTED ; IT IS MADE THE CURRENT DRIVE7; 3. IF RELVOL #1 IS NOT MOUNTED THEN ONE OF THE DRIVESP*; IS PICKED FOR RELVOL #1 AND PUT OFFLINE0; THAT DRIVE IS MADE CURRENT. THE VOL IS MARKED*; AS NEEDING VERIFICATION BUT THE "MOUNT",; REQUEST HAS NOT BEEN SENT TO THE OPERATOR;; CALL: $CALL .REWVL; INPUTS: CURRENT PROCESS*; OUTPUTS: AS ABOVE ALL REGISTERS PERSERED6; THE C-BIT IS CLEAR IF RVOL # 1 IS ONLINE AND AT BOT; OTHERWISE IT IS SET2; .IOSTS IS SET TO IS.SUC AND .IOSTS+2 IS ZERO'ED;T;-.REWVL:: PUSH R0E;D; INIT USER'S RETURN STATUST;U' LET .IOSTS := #IS.SUC ! .IOSTS+2 := 0D;R; SETUP VSCB FOR RVOL #1; & LET R0 := #1 ;SETUP TO GET RVOL #1 IFB V.RVOL(R4) NE R0 BEGIN BLOCKE& $CALL .SCMVL ;IS VOL # 1 IN MVL ON.NOERROR> LET V.UCB(R4) := M.UCB(R0) ;FOUND IT MAKE IT CURRENT DRV7 LET V.RVOL(R4) :== #1 ; NOTE THAT RVOL IS NOW #1F$ LEAVE BLOCK ; AND EXIT BLOCK END ;S7; VOLUME #1 IS NOT MOUNTED THERFORE USE "CURRENT" DRIVET;-"; FIND THE CURRENT DRIVES MVL NODE;E LET R0 :== V.RVOL(R4)E $CALL .SCMVL ON.ERROR1 $CRASH  ENDU LET V.RVOL(R4) :== #1V $CALL .SWPID  END  END ;S&; UPDATE CURRENT FILE POSITION IN VSCB; ' LET V.SEQN(R4) := 0 ! V.SECN(R4) := 0C;E- LET PUSH := V.UCB(R4) ;SAVE UCB OF RVOL #1 ;O9; SCAN THE MVL AND REWIND ALL DRIVES EXCEPT RVOL #1 DRIVE ;; REWIND IT IF IT HAS VOL #1 MOUNTED AND VERIFIED OTHERWISET; UNLOAD THE DRIVE.E;D LET R0 := V.MVL(R4)  WHILE RESULT IS NE LET V.UCB(R4) := M.UCB(R0) $CALL .SETIO& $CALL .RDSTS ; GET DRIVES STATUS8 IF #TP.SEL!TP.RWD NOT.SET.IN ..IOST+2 ; DON'T BOTHER ; IF WE CAN'T DO ANYTHING ASSUME MS.VER,200N0 IF (SP) EQ V.UCB(R4) ANDB M.STAT(R0) IS MI, MTQIO IO.RWU ;UNLOAD RVOL # 1 DRIVE ELSE# MTQIO IO.RWD ;REWIND DRIVEV ENDV ENDV .IF DF R$$11MI ASSUME M.NXT,0D LET R0 := @R0W .IFF LET R0 := M.NXT(R0)E .ENDCV ;GET NEXT MVL NODE" END ;AND LOOP BACK; *; RESTORE RVOL #1 DRIVE AS THE CURRENT ONE;T LET V.UCB(R4) := POP $CALL .SETIO4 $CALL .RDSTS ;SET C-BIT IF NOT AT BOT AND ONLINE POP R0 RETURN;, N; ;+8; THIS ROUTINE (.RWVOL) REWINDS THE VOLUME SET AND GIVESB; A MOUNT MESSAGE IF THE UNIT FOR RVOL #1 IS NOT ONLINE AND AT BOT;N; CALL: $CALL .RWVOL ; RETURN SAME AS .REWVL-; EXCEPT MOUNT MESSAGE ISSUED AS NOTED ABOVEI;;-; .RWVOL::" $CALL .REWVL ;REWIND VOLUME SET& ON.ERROR AND #TP.SEL SET.IN ..IOST+2" $CALL .MOMSG ;GIVE MOUNT MSG.2 SEC ;NOTE: C-BIT NOT PERSERVED ACROSS CALL END RETURN;S .ENDC-BIT IF NOT AT BOT AND 9 $BEGIN MUVLR 0003 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COP00 DATADATADATADATADATADATADATAYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; :; ROUTINES WHICH SCAN AND MODIFY THE UNMOUNTED VOLUME LIST; ; ; MACRO LIBRARY CALLS  .MCALL WSIG$SP; ; EQUATED SYMBOLSR; ; IMPURE DATA AREA; ; PURE DATA AREA;I N# .SBTTL ROUTINE .SWPID - SWAP ID'ST;O;+<; ROUTINE TO SWAP VOLUME ID'S BETWEEN THE "MVL" NODE POINTED<; TO BY R0 AND THE RELATIVE VOLUME NOTED IN V.RVOL (IN VSCB)%; AND THE UVL NODE WHICH CONTAINS IT. ;S4; IF THERE IS NO NODE IN THE UVL FOR THE V.RVOL THEN7; (A NEW NODE MAYBE ALLOCATED) THE SWAP IS DONE BETWEEN7; THE MVL AND AN AVAILABE UVL NODE (THIS WILL CAUSE THET;; MS.RID BIT TO BE SET IN THE M.STAT BYTE FOR THE MVL NODE.A; ; CALL: $CALL .SWPIDD; ; INPUTS: R0 = PTR TO MVL NODE; "CURRENT PROCESS"; V.RVOL = THE VOL TO SCAN FORT; ; OUTPUTS: VOLUME IN UVL#; ID SWAPPED (INCLUDES REL VOL #)A+; MS.VER AND MS.NMO SET IN M.STAT FOR MVLC;; VOLUME NOT IN UVL; SAME AS ABOVE EXCEPT:T$; MS.RID BIT SET IN M.STAT FOR MVL; ;- .ENABL LSB.SWPID::, PUSH R2,R1,R0 ;SAVE REG'S AND MAKE TOP=R03 LET M.STAT(R0) :== #MS.VER!MS.NMO ;SET VOL STATUSD$ $CALL .SCUVL ;SCAN UVL FOR VOLUME ON.ERROR ;NOT IN UVL -- FIND ROOM. LET PUSH :== V.RVOL(R4) ! V.RVOL(R4) :== 010$: ;REF TAG  $CALL .SCUVL ON.ERROR ;NO ROOM ALLOCATE NEW NODEP20$: ;REF TAGL $CALL .ALLOC  ON.ERROR WSIG$S ;WAIT AWHILE BR 20$ ;GO TRY AGAIN ENDS ASSUME L.NXT,0) LET @R0 := V.UVL(R4) ;LINK INTO UVL, LET V.UVL(R4) := R0 + BR 10$ ;GO BACK AND SCAN UVL WE WILLS ;NOW FIND ROOM. END 3 LET @R2 :== TOP ;PLACE REAL VOL # IN L.VOL(1/2) 5 LET V.RVOL(R4) :== POP ;RESTORE REAL VOL # AND R0= LET R0 := TOPA0 LET M.STAT(R0) :== M.STAT(R0) SET.BY #MS.RID ENDE LET M.RVOL(R0) :== V.RVOL(R4) ' LET M.VIDP(R0) := R1 ;UPDATE VID PTRR POP R0,R1,R2 RETURN;I .DSABL LSB $* .SBTTL ROUTINE .SCUVL - UVL SCAN ROUTINE;T;+8; SUBROUTINE TO SCAN THE UVL FOR THE VOL NOTED IN V.RVOL;4; CALL: $CALL .SCUVL ; !; INPUTS: DESIRED VOL # IN V.RVOLO;I%; OUTPUTS: C-BIT CLEARED -- FOUND IT "; R1 = PTR TO ID AREA IN UVL NODE%; R2 = PTR TO L.VOL(1/2) IN UVL NODEV;#-; C-BIT SET -- NOT FOUND R1 = 0 R2 DESTORYED);=;-.SCUVL:: LET R1 := V.UVL(R4)E BEGIN BLOCK= WHILE RESULT IS NE LET R2 := R1 + #L.VOL1 IFB V.RVOL(R4) EQ @R2I6 LET R1 := R1 + #L.VID1 ;(NOTE ADD CLR'S C-BIT) LEAVE BLOCKR ENDC LET R2 := R2 +1N IFB V.RVOL(R4) EQ @R2$6 LET R1 := R1 + #L.VID2 ;(NOTE ADD CLR'S C-BIT) LEAVE BLOCKE ENDU ASSUME L.NXT,0# LET R1 := @R1 ;GET NEXT NODEL END ;AND LOOPB' SEC ;DIDN'T FIND IT FLAG FAILURE END L RETURN;: .ENDR4)E BEGIN BLOCK= WHILE RESULT IS NE LET R2 := R1 + #L.VOL1 IFB V.RVOL(R4) EQ @R2I6 LET R1 := R1 + #L.VID1 ;(NOTE ADD CLR'S C-BIT) LEAVE BLOCKR ENDC LET R2 := R2 +1N IFB V.RVOL(R4) EQ @R2$6 LET R1 := R1 + #L.VID2 ;(NOTE ADD ' $BEGIN MXIO 0003 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONL00#0E Y FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSION; ; E.H. MARISON 18-MAR-75; ; ELLEN R SIMICH 15-MAY-76; THIS MODULE ISSUES ALL QI/O'SG; FOR MAGTAPE OPERATIONS; 5; *** EXCEPTION RSX11M R/W LBN FOR USER'S R/W VBN ***T; ; ; MACRO LIBRARY CALLS ;  .MCALL DIR$,WSIG$S,QIOW$;S; EQUATED SYMBOLS ; . M.TPRM==12. ;INDEX TO QI/O DPB PARM SECTION; ; IMPURE DATA AREA; ;I9.MTDPB:: QIOW$ 0,MTLUN,MTEFN,MTPRI,..IOST,0,<0,0,0,0,0,0>O;R; PURE DATA AREA;E  L;T;+$; SUBROUTINE TO ISSUE MAGTAPE QI/O'S;N+; THIS SUBROUTINE ISSUE'S AND WAITS FOR THE +; COMPLETION OF THE REQUESTED QI/O FUNCTIONS-; THE ROUTINE WILL WAIT FOR NODE SPACE IF NOT,; AVAILABLE AND RETURNS THE C-BIT CLEARED OR-; SET BASED UPON THE DIRECTIVE OR I/O REQUEST ,; COMPLETION STATUS. ..IOST WILL CONTAIN THE.; ERROR/SUCCESS CODE EITHER FROM THE DIRECTIVE; OR THE I/O'S COMPLETION.;%; CALL: VIA MACRO -- MTQIO AS FOLLOWSP; STORE PARM'S IN .MTDPB ; MTQIO FUNC; -- RETURN -- ; AS NOTED ABOVE ;R'; NOTE: MACRO MTQIO EXPANDS AS FOLLOWS:S; JSR R5,.MTXIO' ; .WORD FUNC;H; ALTERNATE ENTRY:&; .MTIO EXECUTES THE "CURRENT QI/O DPB; CALLED VIA A JSR R5,.MTIOI; WITH .MTDPB COMPLETE SETUP;H;-; .ENABL LSB.MTXIO::1 LET .MTDPB+Q.IOFN := (R5)+ ;STORE FUNCTION CODEA.MTIO:: 10$: DIR$ #.MTDPB ;ISSUE DIRECTIVE$ ON.ERROR ;ANY ERRORS ON DIRECTIVE- LET ..IOST :== $DSW ;YES STORE DIR STATUSA- CMPB #IE.UPN,..IOST ;WAS IT NO NODE SPACEU" BNE 20$ ;NO - EXIT WITH ERROR( WSIG$S ;YES - THEN: WAIT FOR AWHILE BR 10$ ;AND TRY AGAIN ENDC ; ELSE:20$:;?; IF THE RETURN STATUS IS IE.EOT AND WE WERE SPACING TAPE MARKSI=; THEN ADJUST THE REQUIRED TM COUNT AND TRY AGAIN UNLESS ZEROX"; THEN RETURN WITH ..IOST= IS.SUS.;R IFB ..IOST EQ #IE.EOT:; IF .MTDPB+Q.IOFN EQ #IO.SPF OR .MTDPB+Q.IOFN EQ #IO.SPBE6 LET PUSH := .MTDPB+M.TPRM ; GET DESIRED TM COUNT IF RESULT IS MIE6 LET TOP := TOP + ..IOST+2 ; SPACING IN REVERSE ELSE3 LET TOP := TOP - ..IOST+2 ; SPACING FORWARD1 ENDY8 LET .MTDPB+M.TPRM := POP ; STORE NEW DESIRED COUNT& BNE 10$ ; CONTINUE IF NOT DONE4 LET ..IOST :== #IS.SUC ; ELSE INDICATE SUCCESS ENDE ENDX+ RETURN ..IOST,R5 ;RETURN WITH C-BIT BASEDF ;ON ..IOSTO .DSABL LSB .END EQ #IO.SPF OR .MTDPB+Q.IOFN EQ #IO.SPBE6 LET PUSH := .MTDPB+M.TPRM ; GET DESIRED TM COUNT IF RESULT IS MIE6 LET TOP := TOP + ..IOST+2 ; SPACING IN REVERSE ELSE3 LET TOP := TOP - ..IOST+2 ; SPACING FORWARD1 ENDY8 LET .MTDPB+M.TPRM := POP ; STORE NEW DESIRED COUNT& BNE 10$ ; CONTINUE IF NOT DO% $BEGIN MMOMSG 0012 < MOUNT MESSAGE >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; %; ELLEN R SIMICH 20-JAN-76 20-APR-76O; J. CLEARY 6-APR-78;N<; JC012 - 00%)DATADATADATADATADATADATADATARENAME $CAT5 TO $MCAT5 TO PREVENT SYSTEM AMBIGUITY; ; JOHN R. COVERT 4-JUN-79I<; JRC017 -- CORRECT RSX-11M RETRIEVAL OF LOGICAL UNIT NUMBER;T7; THIS MODULE CONTAINS THE MOUNT MESSAGE OUTPUT ROUTINEM; ; ; MACRO LIBRARY CALLS ; ; EQUATED SYMBOLSG; ; MESSAGE GROUP 1I; MS.GR1=1*32.R;O; IMPURE DATA AREA; ; PURE DATA AREA;I; MESSAGE DATA;CNEXT: .RAD50 " NEXT "PREV: .RAD50 " PREV."VOLUME: .RAD50 "VOLUME"I;2  6;A3; MOUNT VOLUME "XYZ" OR NEXT VOLUME MESSAGE ROUTINEA;T.MOMSG:: PUSH R0,R1,R2,R3 LET R3 := #.MSGBF ( LET (R3)+ := #FM.CO*400!# LET R3 := R3 + #4. ;BUMP OVER TI;/; PLACE VOLUME NAME OR "NEXT" IN MESSAGE BUFFERO;N LET R0 :== V.RVOL(R4)R $CALL .SCMVL ON.ERROR# $CRASH < UNIT MUST BE ASSIGNED>. END2? LET PUSH := R0 ! M.STAT(R0) :== M.STAT(R0) CLEARED.BY #MS.NMOA IFB #MS.RID SET.IN M.STAT(R0)R! IF R2 EQ #"PR ;ERS PREVIOUS0 LET R2 := #PREV ELSE  LET R2 := #NEXTM END' LET (R3)+ := (R2)+ ! (R3)+ := (R2)+3+ LET (R3)+ := VOLUME ! (R3)+ := VOLUME+2* ELSE! ; STORE "VOLUME" IN MESSAGEB+ LET (R3)+ := VOLUME ! (R3)+ := VOLUME+2T ; GET VOL ID LET R0 := M.VIDP(R0) $CALL $MCAT5  LET (R3)+ := R1< $CALL $MCAT5 . LET (R3)+ := R1: ENDM;A; NOW STORE UNIT NAMEE;D! LET R0 := POP ! R0 := M.UCB(R0)M .IF DF R$$11DI LET R1 :== (R0)+ E LET R2 :== (R0)+ 2 .IFF# LET R2 := U.DCB(R0) ;ERS GET NAMEX LET R1 :== D.NAM(R2) LET R2 :== D.NAM+1(R2)/ CALL .UCBUN ;CONVERT R0 UCB ADDR TO UNIT PTR* .ENDC% LET R1 := R1 CLEARED.BY #^C77 * #50  LET R2 := R2 CLEARED.BY #^C77L! LET R1 := R1 + R2 ! (R3)+ := R1  LET @R3 := 0 ! @R3 :== @R0 $CALL .MSGOT POP R3,R2,R1,R0$ RETURN;R .END LET (R3)+ := R1: ENDM;A; NOW STORE UNIT NAMEE;D! LET R0 := POP ! R0 := M.UCB(R0)M .IF DF R$$11DI LET R1 :== (R0)+ E LET R2 :== (R0)+ 2 .IFF# LET R2 := U.DCB(R0) ;ERS GET NAMEX LET R1/ $BEGIN MEXMSG 0012 < EXPIRATION DATE MESSAGE >SF; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYP0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERDG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDD@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75;S; ELLEN R SIMICH 20-JAN-76; J. CLEARY 6-APR-78S;P<; JC012 - RENAME $CAT5 TO $MCAT5 TO PREVENT SYSTEM AMBIGUITY;R#; JRC017 -- JOHN R. COVERT 1-JUN-79I4; CORRECT RSX-11M RETRIEVAL OF LOGICAL UNIT NUMBER;S$; JRC032 -- JOHN R. COVERT 20-JAN-80(; CORRECT TIMEOUT MESSAGES FOR 11D/IAS;P1; THIS MODULE OUTPUTS THE EXPRIATION DATE MESSAGE5; ; ; MACRO LIBRARY CALLSO; ; EQUATED SYMBOLSM; ; MESSAGE GROUP ONEI;- MS.GR1=1*32.E;; IMPURE DATA AREA; ; PURE DATA AREA;5  .EXMSG:: PUSH R0,R1,R2,R3,R4,R5 LET R3 := #.MSGBF1. LET (R3)+ := #FM.CO!FM.TI*400!# LET R3 := R3 + #4. ;BUMP OVER TIT;J%; PLACE VOLUME NAME IN MESSAGE BUFFERF;G LET R0 :== V.RVOL(R4)R $CALL .SCMVL ON.ERROR# $CRASH < UNIT MUST BE ASSIGNED>R ENDS PUSH R0 ;SAVE PUD ADDRH LET R0 := M.VIDP(R0)$ $CALL $MCAT5 ;CONVERT 1'ST LET (R3)+ := R1M$ $CALL $MCAT5 ;CONVERT NEXT LET (R3)+ := R1U;D; NOW STORE UNIT NAME (TWICE);! LET R0 := POP ! R0 := M.UCB(R0)R .IF DF R$$11D  LET R1 :== (00-90E R0)+  LET R2 :== (R0)+ * .IFF# LET R2 := U.DCB(R0) ;ERS GET NAMEM LET R1 :== D.NAM(R2) LET R2 :== D.NAM+1(R2)/ CALL .UCBUN ;CONVERT R0 UCB ADDR TO UNIT PTRL .ENDCR% LET R1 := R1 CLEARED.BY #^C77 * #50R LET R2 := R2 CLEARED.BY #^C77A; LET R1 := R1 + R2 ! (R3)+ := R1 ; R1 EQ UNIT NAME (RAD50) 9 LET R0 :== @R0 CLEARED.BY #^C377 ; R0 = UNIT # (BINARY)E+ LET (R3)+ := R0 ! (R3)+ := R1 ! @R3 := R0N# $CALL GETATL ;ERS GET ATL ADDRESS0 $CALL .MSGOT POP R5,R4,R3,R2,R1,R01 RETURN;;E8; GET I/O REQ NODE ADDR INTO .IOPKT IF NOT ALREADY THERE;MGETATL: IF .IOPKT IS EQ .IF DF R$$11DM, LET R1 := #.IORNB ; SCAN BLOCKED I/O CHAIN .IFF/ $CALL .GRCVL ;ERS GET RECEIVE QUEUE LISTHEAD5 LET R1 := R4 .IFTFD BEGIN BLOCKE WHILE @R1 IS NE)/ LET R0 := @R1 ; COMPAIR VSCB FOR THIS REQ@ .IFT, LET R2 := 2(R0) ; AND IF IT'S THE SAME- IF U.VA(R2) EQ .VSCBA ; AS CURRENT VSCBE .IFF4 LET R2 := I.UCB(R0) ;ERS GET UCB FROM IOPACKET/ IF U.VCB(R2) EQ .VSCBA ;ERS IF THIS IS IT  .ENDCK1 LET .IOPKT := R2 ; UPDATE .IOPKT FOR "TI"Q LEAVE BLOCK END.! LET R1 := @R1 ; GET NXT REQI END ;AND LOOPC END BLOCKS END RETURN;4 .ENDFD BEGIN BLOCKE WHILE @R1 IS NE)/ LET R0 := @R1 ; COMPAIR VSCB FOR THIS REQ@ .IFT, LET R2 := 2(R0) ; AND IF IT'S THE SAME- IF U.VA(R2) EQ .VSCBA ; AS CURRENT VSCBE .IFF4 LET R2 := I.UCB(R0) ;ERS GET UCB FROM IOPACKET/ IF U1 $BEGIN MMTMSG 0010 < ASSORTED MAGTAPE MESSAGES >UF; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY 0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER G; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED0@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75;S; ELLEN R SIMICH 21-JAN-76; ; JOHN R. COVERT 4-JUN-79R<; JRC017 -- CORRECT RSX-11M RETRIEVAL OF LOGICAL UNIT NUMBER; 1; THIS MODULE CONTAINS ASSORTED MAGTAPE MEASSAESA; ; ; MACRO LIBRARY CALLS ; ; EQUATED SYMBOLSH; ; MESSAGE GROUP ONEO;T MS.GR1=1*32.Q;M; IMPURE DATA AREA; ; PURE DATA AREA;  R;( ; SETUP MACRO ;I .MACRO SETUPO JSR R0,SETUP .ENDM;A; SETUP ROUTINET;PSETUP: PUSH R1F LET R1 := #.MSGBFE JMP @R0;.;M; DISMOUNT COMPLETE MESSAGE ;I.DMMSG:: SETUP LET (R1)+ := #FM.CO*400!E.DMO0 BR STOUT ;SEND MESSAGE; ;L; PLACE UNIT ON-LINE MESSAGE;D.OLMSG:: SETUPT) LET (R1)+ := #FM.CO*400!R BR STOUT; ;A; BAD VOLUME MESSAGE;G.BVMG1:: MTQIO IO.RWU ;UNLOAD UINT SETUPT) LET (R1)+ := #FM.CO*400!;; GET UNIT # AND SEND MESSAGEU;STOUT: ;REF TAG LET R0 := #.MSGPATSTOUT1: ;REF TAGF PUSH R2:) LET R2 := V.UCB(R4) ;PUT UNIT NAME ANDC .IF DF R$$11D LET R1 :== (R2)+  LET PUSH :== (R2)+ * .IFF$ LET R1 := U.DCB(R2) ;ERS GET NAME LET PUSH :== D.NAM+1(R1) LET R1 :== D.NAM(R1) PUSH R0 ;SAVE R0M/ MOV R2,R0 ;CONVERT THE UCB ADDRESS CONTAINEDA. CALL .UCBUN ;IN (R0,R2) TO A POINTER TO THE! MOV R0,R2 ;LOGICAL UNIT NUMBER  POP R0 ;RESTORE R0. .ENDC% LET R1 := R1 CLEARED.BY #^C77 * #50T" LET TOP := TOP CLEARED.BY #^C77& LET R1 := R1 + (SP)+ ; IN PARM BLK* LET (R0)+ := R1 ! @R0 := 0 ! @R0 :== @R2 $CALL .MSGOT ;SEND MESSAGE POP R2,R1,R0 RETURN;+ .ENDFF00>)DATADATADATADATADATADATADATA4 $BEGIN MPOSID 0013 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY.0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERKG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDA@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 12-DEC-75; ELLEN R SIMICH 9-APR-76; ; 4; JRC027 15-SEP-79 GIVE ERROR IF FID POINTER IS ZERO;;U+; JRC040 13-NOV-80 IMPLEMENT UNLABELED TAPED; /; JRC045 26-DEC-80 IMPLEMENT 17 CHARACTER NAMESP;T:; THIS ROUTINE POSITIONS THE VOLUME SET VIA AN FID POINTER; ; ; MACRO LIBRARY CALLSH; ; EQUATED SYMBOLS; ; IMPURE DATA AREA; ; BUFFER FOR USERS .FID ;I.FID:: .BLKW 3 ; ; PURE DATA AREA;D T;+.; THIS ROUTINE WILL POSITION THE VOLUME SET TO*; THE FILE WHOSE ID EQUALS THAT POINTED TO1; BY THE FID PARAMETER IN THE CURRENT I/O REQUESTV;R; CALL: $CALL .POSID;O ; OUTPUTS:5; V.STAT+4 = REQUEST FILE SECTION # (USED BY .BLDHD)50; C-BIT CLEAR TAPE POS AND HDR'S IN HDR BUFFERS*; C-BIT SET ERROR .IOSTS SET TO NOTE WHY; ALL REGISTERS PERSERVED ;R;- .ENABL LSB.POSID:: IFB #VM.ULB SET.IN V.MOU(R4). RETURN NOERROR ;POSID IS A NO-OP FOR UNLAB END ;E; BRING IN THE REQ FILE ID;R PUSH R0,R1,R2I LET R0 := R5 + #I.FIDP .IF DF,R$$11MQ- MOV (R0),R1 ;MAKE SURE THAT THE FID PTR IS . BIS 2(R0),R1 ;THERE (IF IT IS, ONE OF THESE) BNE 5$ ;WILL BE NON ZERO+1 SETERR IE.BAD ;FID PTR IS ZERO - RETURN IE.BADB& BR 30$ ;AND CLEAN UP STACK AND EXIT5$: ;REF LABEL .ENDCS $CALL .BLXI T BCS 30$ ;RETURN ON ERROR;L5; SEARCH LOOP -- THE LOOP IS REPEATED UNTIL WE ARE ATUE; THE DESIRED POSITION OR PASSED THE DESIRED POSITION (THATS AN ERRORFB; IN THAT THE TAPE IS MESSED UP OR AT LEAST ITS POSITIONING) OR WE<; ARE AT THE END OF THE VOLUME SET. HOWEVER, BEFORE WE START;; IF THE DESIRED POSITION IS LESS THAN THE CURRENT POSITIONN@; THE VOLUME SET IS REWOUND. IF ITS EQUAL THEN WE ENTER THE LOOP;; AT "RDHDRS" IE WE READ THE HDR'S AND VERIFY THE POSITION.S; ' MOV #1,V.STAT+4(R4) ;ALWAYS SECTION 1R;R%; LOOP ENTRY POINT FOR ROUTINE .PFILEO;S4POSFIL: LET V.PSTA(R4) :== #VP.SM ;FLAG SEARCH MODE IF .FID LOS V.SEQN(R4)) IF RESULT IS EQ AND #1 HIS V.SECN(R4)E, $CALL .HDRCK ;CHECK FOR HDR'S IN CORE( BCS RDHDRS ;NO - GO READ THEM IN( BR CMHDRS ;YES - GO COMPAIR THEM END 3 $CALL .RWVOL ;PASS DESIRED POS REWIND VOL SETN ON.ERROR ;AT BOT?N% CALLR .BLOCK ;GO BLOCK PROCESST ENDA ENDF;H ;SEARCH LOOP;10$:$ $CALL .NXHDR ;GET TO NXT HDR SET BCS 20$ ;ERRORS NOW MEANS NO ;SUCH FILERDHDRS:P $CALL .RDHDR ;READ IN HDR'SO BCS 20$ ;SAME AS ABOVE6 IF V.SEQN(R4) IS EQ THEN V.SEQN(R4) := V.SEQN(R4) +1# ;TAKE CARE OF DUMMY FILE CASE ; 8; IF AT DESIRED POSITION RETURN C-BIT CLEAR ELSE IF PAST&; RETURN C-BIT SET IF BEFORE LOOP BACK;VCMHDRS: IF .FID LOS V.SEQN(R4) ( IF RESULT IS EQ AND #1 EQ V.SECN(R4) CLC ;WE ARE THERE BR 30$ END20$:' SETERR IE.NSF O BR 30$ END  BR 10$ ;LOOP BACK ;30$: POP R2,R1,R0 RETURN; ;H .SBTTL .PFILE';;C;++; THIS ROUTINE WILL POSITION THE VOLUME SETN<; TO THE FILE WITH THE SEQ# EQUAL TO THAT STORED IN V.STAT+4; ;CALL: $CALL .PFILE ;I;INPUTS:; CURRENT PROCESS; V.STAT+4 = DESI00F0E RED FILE SEQ#O;L ;OUTPUTS:V%; SAME AS .POSID EXCEPT FOR V.STAT+4 ; V.STAT+4 IS UNCHANGED;E;-.PFILE::, PUSH R0,R1,R2 ;PUSH REGISTERS FOR RETURN+ LET .HVSCB := 0 ; MAKE SURE .HDRCK FAILS2 LET .FID := V.STAT+4(R4) ; STORE DESIRED FILE ID* BR POSFIL ; GO TO SEARCH LOOP IN .POSID;F;' .DSABL LSB .ENDOUTINE WILL POSITION THE VOLUME SETN<; TO THE FILE WITH THE SEQ# EQUAL TO THAT STORED IN V.STAT+4; ;CALL: $CALL .PFILE ;I;INPUTS:; CURRENT PROCESS; V.STAT+4 = DESI) $BEGIN MFNDNM 0016 < FIND FILE BY NAME >CF; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYL0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERNG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED @; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75;S; JOHN R. COVERT 22-MAR-79*; JRC010 -- ENHANCE TASK ABORT PROCEDURE;L; JOHN R. COVERT 14-JAN-80'; JRC030 - HANDLE ABORTING TASKS IN IASR;N; JOHN R. COVERT 12-NOV-80&; JRC040 - ADD UNLABELLED TAPE SUPPORT;B'; THIS ROUTINE IMPLEMENTS THE FIND QI/OT;O;A; MACRO LIBRARY CALLS ;  .MCALL NBOFF$ NBOFF$ DEF$L ; EQUATED SYMBOLS,;5; IMPURE DATA AREA;O"; SCRATCH FNB USED IN NAME SEARCHS;T.DRFNB:: .BLKB S.FNBA;F; PURE DATA AREA;E O;;+6; THIS ROUTINE IMPLEMENTS THE FIND NAME QI/O (CODE 11)5; THE FILE NAME BLOCK ADDR IS THE ONLY LEGAL PARMETERN5; IN THE CALL. THE V.STAT+4 WORD IS USED AS FOLLOWS:I;A(; V.STAT+4 HOLDS THE START POSITION FOR5; THE SEARCH (FILE SEQ# AND FILE SEC# ALLWAYS 0 OR 1)P;E.; V.STAT+4 IS USED AS A "FIRST" TIME INDICATOR); IT IS USED WITH THE N.NEXT CONTEXT WORDQ%; IN THE FNB AND IS USED TO NOTE WHEN.; THE START POSITION SHOULD BE INITIALIZED AND3; WHEN IT SHOULD BE CHECKED. BOTH VALUES ARE NEEDED9; SINCE THE PROCESS MAY BLOCK BEFORE ANY "MATCH" IS MADE.),; THE NOT FIRST TIME VALUE IS THE START SEQ#;R; NOTE: .PRDON ZERO'S V.STAT+4;- .ENABL LSB.FNDNM::& $CALL .DRINI ;SETUP FOR NAME SEARCH BCS 20$ ;EXIT ON ERRORS0 BEQ 30$ ;IF FIRST TIME SKIP TAPE POSITIONING; ; NAME SEARCH LOOP;I10$: ;REF TAGS2 CLR .HVSCB ;HEADERS ABOUT TO BE INVALID ;JRC010* $CALL .NXHDR ;GET TO NEXT HDR LABEL SET BCS 20$ ;EXIT ON ERRORS1 CALL .ABOCK ;IS TASK MARKED FOR ABORT? ;JRC010( BCC 15$ ;IF CC, NO, CONTINUE ;JRC0106 MOV #IE.ABO,.IOSTS ;YES, RETURN IE.ABO ERROR ;JRC010. RETURN ;AND BACK OUT TO FINISH I/O ;JRC01015$: ;REF LABEL ;JRC010L $CALL .RDHDR ;READ IN HDR'S ON.ERROR IFB #IE.EOV EQ .IOSTS < IF V.STAT+4(R4) EQ #1 ; IF WE STARTED AT THE BEGINNING* ; OF THE VOLUME SET THEN DON'T REWIND ; JUST TAKE ERROR EXIT0 CALLR .DREEX ENDH% $CALL .RWVOL ;REWIND VOLUME SETS$ ON.ERROR ;IF VOL #1 NOT READY& CALLR .BLOCK ;GO BLOCK PROCESS END BR 10$ ;ELSE CONTINUE ENDO20$: ;REF TAGE" RETURN ;EXIT ON "HARD" ERRORS END30$: ;REF TAG  IFB #VM.ULB SET.IN V.MOU(R4)* MOV #.DRFNB,R5 ; POINT TO SCRATCH FNB. IF #NB.SNM!NB.STP!NB.SVR SET.IN N.STAT(R5)* CALLR .DREEX ; DON'T ALLOW WILDCARD ENDO ASSUME N.FID,0& MOV #1,(R5) ; SET A FILE-ID OF 1+ MOV #FN17CH,R0 ; GET ANSI NAME POINTERL $CALL .POSUL CALLR .DREX1 ENDA& $CALL .FTCHK ;MAKE FIRST TIME CHECK ;CHECK FOR AT START POINT ON.ERROR8 IF V.SEQN(R4) IS EQ THEN V.S00DATADATADATADATADATADATADATAEQN(R4) := V.SEQN(R4) +1# ; TAKE CARE OF DUMMY FILE CASEA! IF V.SEQN(R4) EQ V.STAT+4(R4)- IF V.SECN(R4) IS EQ OR V.SECN(R4) EQ #1 4 CALLR .DREEX ;AT START POINT TAKE ERROR EXIT END' ENDI END" $CALL .GTFID ;GET FILE NAME ETC $CALL .CMFID ;DO THEY MATCH ? BCS 10$ ; NO - TRY NEXT ONE& CALLR .DREX ;YES - TAKE COMMON EXIT;D .DSABL LSB .END.FTCHK ;MAKE FIRST TIME CHECK ;CHECK FOR AT START POINT ON.ERROR8 IF V.SEQN(R4) IS EQ THEN V.S2 $BEGIN MPOSEN 0005 < POSITION TO END OF VOL SET >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYS0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERAG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDL@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; 9; THIS MODULE POSITIONS THE VOLUME SET AT ITS LOGICAL ENDR;T; JOHN R. COVERT 26-MAR-79*; JRC010 -- ENHANCE TASK ABORT PROCEDURE;D; JOHN R. COVERT 14-JAN-80'; JRC030 - HANDLE ABORTING TASKS IN IAS ;R;O; MACRO LIBRARY CALLS;R; EQUATED SYMBOLS ;T; IMPURE DATA AREA;I; PURE DATA AREA; ;I;+6; THIS ROUTINE POSITIONS THE VOLUME SET AT ITS LOGICAL; END -- IE EOF1,EOF2,...**S:; WITH THE TAPE POSITIONED BETWEEN THE LAST TWO TAPE MARKS;S; CALL: $CALL .POSEND;-; INPUTS CURRENT PROCESS;I2; OUTPUTS: TAPE POSITIONED AS ABOVE -- C-BIT CLEAR'; IF C-BIT SET HARDWARE/FORMAT PROBLEMC; .IOSTS EQUALS ERROR;;- .POSEND::T2 CLR .HVSCB ;HEADERS ABOUT TO BE INVALID ;JRC010 $CALL .NXHDR ON.NOERROR3 CALL .ABOCK ;IS TASK MARKED FOR ABORT? ;JRC010I* BCC 15$ ;IF CC, NO, CONTINUE ;JRC0108 MOV #IE.ABO,.IOSTS ;YES, RETURN IE.ABO ERROR ;JRC010/ RETURN ;AND BACK OUT TO FINISH I/O ;JRC010N15$: ;REF LABEL ;JRC010  $CALL .RDHDR END ON.ERROR IFB #IE.EOV EQ .IOSTS: LET .IOSTS := #IS.SUCC4 IF V.SEQN(R4) IS EQ ;IF DUMMY FILE REPOSITION. $CALL .PVHDR ;TO OVERWRITE IT IF USER END ;DESIRES TO ;UPDATE FILE POSITION 8 LET V.SEQN(R4) := V.SEQN(R4) +1 ! V.SECN(R4) := #1 WHILEB V.TPOS(R4) IS NE; TMSPACE #1( LET V.TPOS(R4) :== V.TPOS(R4) -1 ENDE RETURN ;EXIT NO ERRORS ENDO% RETURN ERROR ; EXIT WITH ERRORSE ENDC& BR .POSEND ;NOT THERE YET CONTINUE; .END#IE.EOV EQ .IOSTS: LET .IOSTS := #IS.SUCC4 - $BEGIN MPURGE 0013 EF; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITYS0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASEREG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDO@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 12-DEC-75; ; JOHN R. COVERT 20-JAN-80-; JRC030 - CORRECT HANDLING OF ABORTING 000E TASKSL;O; JOHN R. COVERT 26-JUN-803; JRC038 - SEARCH FORWARD UNLESS IT'S THE SAME FILEI7; JRC040 - CHANGED JRC038 FOR UNLABELED TAPE 22-NOV-80.S;L?; THIS MODULE PROCESSES THE I/O RUN DOWN REQUEST SENT BY ..FIFLH; ; ; MACRO LIBRARY CALLSA; ; EQUATED SYMBOLS); ; IMPURE DATA AREA; ; PURE DATA AREA; M; ;+*; I/O RUNDOWN FILE PURGE (FLUSH) PROCESSOR;/; THIS PROCESSOR IS CALLED ON A FILE FLUSH CALL-3; FROM ..FIFL WHEN ENTERED THE RCV NODE BUFFER ADDRT ; IS IN R5;O;- .IF DF R$$11DN.PURGE::;-/; GET VSCB ADDR TAKING REDIRECTION INTO ACCOUNT ; AND SETUP THE I/O DATA PATH.;3 LET R4 := R.PUD(R5)- WHILE R4 NE U.RP(R4) LET R4 := U.RP(R4) ENDR# LET R4 := U.VA(R4) ! .VSCBA := R4R IF RESULT IS NE  $CALL .SETIO, $CALL .RDSTS ;GET CURRENT UNITS STATUS END;8; NOW MAP TO THE USER'S LUT AND SCAN IT FOR A WINDOW PTR; TO THIS VSCB'S NULL WINDOW;E PUSH R.ATL(R5); LET TOP := TOP + #A.IN ;SAVE USER'S ATL-I/O IN PROG ADDR;0; NOTE: FROM HERE ON WE DO NOT NEED THE RCV NODE; IF R4 IS NEI3 LET R5 := R4 + #V.WIND ;R5 = PTR TO NULL WINDOW LET R3 := TOP - #A.INH ; NOTE TOP = USER'S  ; I/O IN PROG COUNTE $CALL .TSKH! LET R3 := R3 + #H.LUT  BEGIN BLOCK  REPEAT R2 := (R3)+( TST (R3)+ ; BUMP TO WINDOW PTR IF (R3)+ EQ R5 ;WE HAVE A HIT+ LET -(R3) := 0 ;CLEAR USER'S LUTU. LET @(SP) := @(SP) -1 ;ADJ HIS COUNT;S4; IF PROCESS IS BLOCKED THEN UNBLOCK IT AND CONTINUEB; ELSE CHECK FOR FILE HAVING BENN EXTENDED AND IF SO WRITE OUT THE; END OF FILE LABEL GROUP.;  IFB V.PSTA(R4) IS MI- LET .BLKPC := .BLKPC -1 ;UNBLOCK PROCESS  LET V.PSTA(R4) :== 0  ELSE: ASSUME W.CTL,0B IF #WI.EXT SET.IN (R5) AND #TP.SEL NOT.SET.IN ..IOST+2 $CALL .CLOT1+ $CALL .TRMVOL& LET V.SEQN(R4) := V.SEQN(R4) +1 LET V.SECN(R4) := #1  END ENDS;U; CLEAN UP THE VSCBI;L, LET @R4 := @R4 -1 ! V.ATL(R4) := 0 LET R0 := R4 + #V.STAT, .REPT V.STAT+6-V.STAT/2 ;THIS WAY IS MORE# CLR (R0)+ ;EFFICIENT FOR SMALL  .ENDM ;VALUES OF .REPTN- ADD #V.WIND-,R0 ;POINT TO WINDOWE .REPT 2# CLR (R0)+ ;CLEAR OUT IMPORTANT# .ENDM ;PART OF WINDOW;N7; MAGTAPE IS NOT A SHARABLE DEVICE THERFORE WE CAN ONLYR9; HAVE ONE "HIT" SO WE WILL NOW EXIT THE SCAN REPEAT LOOPS;( LEAVE BLOCK END END REPEAT END BLOCK ; 7; SCAN BLOCKED I/O LIST FOR REQUESTS FOR THIS VSCB ONLY 9; WE NEED TO BE CALLED AGAIN FOR OTHER VSCBS SO WE CAN DO%; THE ABOVE CODE, IF NECESSARY, ALSO. ;N* LET R5 := TOP - #A.IN ; R5 = ATL ADDR+ LET R0 := #.IORNB ; BLOCKED CHAIN HEADL! WHILE @R0 IS NE ; SCAN CHAIN.$ LET R1 := @R0 ; GET NODE ADDR! LET R2 := 2(R1) ; PUD ADDRE- IF U.VA(R2) EQ R4 ; IF IT IS THIS VSCBT- CALL CFLUSH ; CALL CONDITIONAL FLUSHC ON.NOERROR ; IF FLUSHED+ IFB V.PSTA(R4) IS MI ; AND STILL BLOCKED " DEC .BLKPC ; THEN UNBLOCK IT CLRB V.PSTA(R4) END ENDS ELSE ; NOT THIS VSCB& LET R0 := @R0 ; GET NEXT NODE ENDI END ;E END ;O1; SCAN THE I/O REQUEST NODE CHAIN FOR ALL REQUESTS); FOR THE ABORTED TASK (VIA ATL -- I.ATL) ; AND PURGE THEM FROM THE CHAIND;D( LET R5 := TOP - #A.IN ; R5 = ATL ADDR) LET R0 := #.IORNC ; GET CHAIN LISTHEADT WHILE @R0 IS NE ; SCAN CHAIN# LET R1 := @R0 ; GET NODE ADDR * CALL CFLUSH ; CALL CONDITIONAL FLUSH END C; ,; ACCOUNT FOR THE FLUSH REQUEST AND CLEAN UP;N DEC @(SP)+( LET PUSH := #.CNTRL ;SET RETURN ADDR ;FOR .PURGE ; OR DISMOUNT IF R4 IS NE AND @R4 LE #1N+ LET R0 := V.UCB(R4) ;DISMOUNT PENDING  IFB #CH.UNL SET.IN U.CH(R0)U# CALLR .DDMOU ;YES GO DO IT5 END  END; RETURN;R; CONDITIONAL FLUSH ROUTINEC; R5 IS ATL ADDR; R1 IS I/O PACKET ADDRC; R0 IS CHAIN POINTER ; #; CARR00DATADATADATADATADATADATADATAY CLEAR, WE FLUSHED THE ENTRYA; CARRY SET, WE DIDN'T; 1CFLUSH: IF I.ATL(R1) EQ R5 ; IF THE ATL MATCHESN- LET @R0 := @R1 ; IT'S A HIT, CLOSE CHAINN PUSH R4T) LET R2 := 0 ! R3 := #IE.ABO ! R4 := 0I CALL ..IODNS POP R4 ; REQUEST IS PURGED& RETURN NOERROR ; INDICATE SUCCESS END ) LET R0 := @R0 ; NO HIT, JUST GET NEXTS$ RETURN ERROR ; AND SAY WE DIDN'T .ENDCO;T .ENDUSH ROUTINEC; R5 IS ATL ADDR; R1 IS I/O PACKET ADDRC; R0 IS CHAIN POINTER ; #; CARR4 $BEGIN MFNDSR 0024 < SUBROUTINE USED BY FIND NAME >F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY 0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERSG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDr@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75;S; ELLEN R SIMICH 21-JAN-76; ;L; JOHN R. COVERT 25-JUN-803; JRC038 - SEARCH FORWARD UNLESS IT'S THE SAME FILEY;H; JOHN R. COVERT 12-NOV-80&; JRC040 - ADD UNLABELLED TAPE SUPPORT;P0; JOHN R. COVERT 26-DEC-80, 26-FEB-81, 25-APR-81'; JRC045 - IMPLEMENT 17 CHARACTER NAMESN;H'; SUBROUTINES USED BY FIND NAME SEARCHS ; ; ; MACRO LIBRARY CALLSI;  .MCALL NBOFF$,FCSBT$ NBOFF$ DEF$LA FCSBT$ DEF$LY;M; EQUATED SYMBOLSR; ; IMPURE DATA AREA;O4FN17CH::.BLKB 17. ; TEMP STORAGE FOR CURRENT SEARCH .EVEN;;C; ********************** TEMPORARY -- UNTIL SYSTEM-WIDE DEFINITION N.ANM1=2L N.ANM2=24 NB.ANS=2000$; *********************************; ; PURE DATA AREA;  E' .SBTTL .DRINI -- COMMON SETUP ROUTINE0;-;+>; THIS ROUTINE SETS UP FOR NAME SEARCHS BY CHECKING MOUNT MODE>; I/O REQ. PARAMETERS AND PERFORMING THE N.NEXT/V.STAT+4 LOGIC;; CALL: $CALL .DRINIT;E; INPUTS: CURRENT PROCESSR; ; OUTPUTS: C-BIT CLEAR ; FNB FETCHED INTO SCRATCH FNB; R5 = PTR TO SCRATCH FNB"; N.NEXT = 0 OR START FILE SEQ #-; V.STAT+4 = N.NEXT IF N.NEXT <> 0 ON ENTRYM*; Z-BIT CONDITIONED ON V.STAT+4 IE Z-BIT; SET "FIRST TIME CALL" ; ; C-BIT SET; .IOSTS = ERROR CODE ;C;- .ENABL LSB.DRINI::) LET R0 := R5 + #I.FIDP ;VALIDATE PARM.C, LET R1 := (R0)+ OR (R0)+ OR (R0)+ OR (R0)+& .IIF DF,R$$11M,LET R1 := R1 OR (R0)+ BNE 10$ ;MUST ALL BE ZERO ' TST (R0)+ ;BUMP OVER ACCESS CONTROLC ;THE FNBP MUST BE NON-ZERO. .IIF DF,R$$11M,TST (R0)+ ;FNBP 2 WD'S IN 11M, IF (R0) IS EQ ORB #VM.BYP SET.IN V.MOU(R4)10$: ;REF TAG2 ERROR IE.BAD  END - .IIF DF,R$$11M,TST -(R0) ;BUMP BACK TO FNBPI7 LET R1 := #.DRFNB ! R3 := R5 ! R5 := R1 ;FETCH IN FNBE& ; NOTE: R3 = PTR TO I/O REQ NODE $CALL .BLXI ON.NOERROR; <; PICK UP 17 CHARACTER NAME FROM FILE NAME BLOCK, IF PRESENT;R% MOV R5,R1 ; RETRIEVE FNB POINTERT' CLR FN17CH ; INDICATE NO ANSI NAME - MOV N.STAT(R1),R0 ; NEED THIS A FEW TIMES  IF #NB.ANS SET.IN R0;.; CHECK WILD-CARD STATEF2; (IF NAME IS WILD, TYPE MUST BE, TOO, FOR ANSI);> BIC #^C,R0R. IF RESULT IS NE AND #NB.SNM!NB.STP NE R01 ERROR IE.BAD = END ; + MOV #FN17CH,R0 ; PICK UP TEMP STORAGER ASSUME N.ANM1,2A TST (R1)+F/ REPEAT R2 := #6 ; FIRST TWELVE CHARACTERSR MOV (R1)+,(R0)+ END  ASSUME N.ANM2,24 MOV #.DRFNB+N.ANM2,R1 MOV (R1)+,(R0)+ MOV (R1)+000E ,(R0)+* MOVB (R1)+,(R0)+ ; LAST 5 CHARACTERS" MOV #FN17CH,R0 ; FOR VERIFY) $CALL .ANVFY ; MAKE ALL CHRS LEGAL  ENDL;S/ LET V.PSTA(R4) :== #VP.SM ;FLAG SEARCH MODED;A5; PERFORM N.NEXT/V.STAT+4 LOGIC -- IE FIRST TIME CALLF;C7 IF N.NEXT(R5) IS EQ THEN N.NEXT(R5) := V.STAT+4(R4)  IF RESULT IS EQE ; FIRST TIME = IFB #AC.RWD SET.IN I.ACTV(R3) ; REWIND REQUESTED BEFORE  ;SEARCH IF SO DO IT  $CALL .RWVOL ON.ERROR9 CALLR .BLOCK ;BLOCK PROCESS IF NOT READY TO GO END ENDN" IFB #VM.ULB SET.IN V.MOU(R4) SEZA* RETURN ;DON'T WORRY ABOUT HEADERS ENDP+ $CALL .HDRCK ;SEE IF HDR'S IN COREV ON.ERRORF $CALL .CMFID ;ARE WE SEARCHING FOR THE CURRENT+ BCC 20$ ;IF CC, YES, GO GET ITS HEADERST$ $CALL .NXHDR ;NO, SO HEAD FORWARD;37; IF THE TAPE IS AN OLD .FL300 TAPE THEN WE MUST ADJUST;; THE CURRENT TAPE FILE POSITION SO THAT IT WILL BE CORRECTK<; (IE THE NOW CURRENT POSITION ) AFTER THE .RDHDR IS CALLED.>; (IE -- WE DO NOT USE THE FILE # IN HDR1 ON OLD .FL300 TAPES); 20$: ;REF TAG$ $CALL .RDHDR ; NO READ THEM IN ON.ERRORD IFB #IE.EOV EQ .IOSTS $CALL .RWVOL  ON.ERRORD CALLR .BLOCKT END BR 20$  END* RETURN ERROR ;SOME KIND OF HWR ERROR END ENDF0 IF V.SECN(R4) IS NE AND V.SECN(R4) NE #1 $CALL .NXHDR ' BR 20$ ;START AT FIRST FILE SECTIONR ENDH ENDN2 LET V.STAT+4(R4) := N.NEXT(R5) ;COND Z-BIT ETC ENDT RETURN .DSABL LSB;O .& .SBTTL .DREEX,.DREX,.DRX1,AND .FTCHK;A;+:; THESE ROUTINES (EXCEPT FOR >FTCHK) ALL SEND THE CONTENTS=; OF THE SCRATCH FNB BACK TO THE USER WITH APPORIATE UPDATES.R;L6; ROUTINE .DREEX CLEARS N.NEXT AND SET .IOSTS = IE.NSF=; ROUTINE .DREX SENDS THE COMPLETE SCRATCH FNB BACK AND EXITSFC; ROUTINE .DRX1 SEND BACK THE # OF BYTES IN R2 FROM THE SCRATCH FNB;:; ROUTINE .FTCHK CHECKS FOR A FIRST TIME CALL AND NOTE THE5; STARTS POSITION IF IT IS. IF NOT IT SETS THE C-BIT; AND RETURNS.L;B(; ALL ROUTINES ARE CALL VIA A $CALL NAME!; WITH R5 POINTING AT SCRATCH FNBX;T;-.DREEX:: LET N.NEXT(R5) := 0 SETERR IE.NSF ;H; FALL THRU TO .DREX;.DREX::  LET R2 := #S.FNB;D; FALL THRU TO .DRX1;O.DRX1::E;E(; SETUP FOR .BLXO OF SCRATCH FNB TO USER; LET R0 := R5 ! R1 := .IOPKT # LET R5 := R1 ! R1 := R1 + #I.FNBP! $CALL .BLXO ;SEND FNB TO USER  RETURN; ;E4; .FTCHK SET THE C-BIT IF THIS IS NOT THE FIRST TIME;I.FTCHK:: IF V.STAT+4(R4) IS EQT" LET V.STAT+4(R4) := V.SEQN(R4)8 IF RESULT IS EQ THEN V.STAT+4(R4) := V.STAT+4(R4) +1= LET N.NEXT(R5) := V.STAT+4(R4) ;NOTE: R5 = PTR TO SCRATCHT# ;FNB THE FIRST TIME ONLY !!!: ELSE SECA END  RETURN; X0 .SBTTL .CMFID -- ROUTINE TO COMPAIR FILE NAMES;;+6; THIS ROUTINE COMPAIRS THE FILE NAME SPECIFIED BY THE;; USER IN THE SCRATCH FNB WITH THE CURRENT FILE NAME IN THE ; LABEL DATA SECTION OF THE VSCB; ; CALL: $CALL .CMFID;C#; INPUTS: R5 = PTR TO FNB (SCRATCH)E; CURRENT PROCESS;N; OUTPUTS: C-BIT CLEAR'; FNB UPDATED WITH FILE SEQ AND SEC # *; AND FILE NAME,TYPE AND VER # FRON VSCB;R; C-BIT SET -- NO MATCH); OR NOT THE FIRST SECTION OF THE FILE!; IN WHICH CASE THE VOL SET IS.; IS REWOUND.;O; NOTE: R3 IS DESTROYED;H;- .ENABL LSB.CMFID::; 0; USE 17 CHARACTER NAME IF USER IS SPECIFYING IT;C# IF #NB.ANS SET.IN N.STAT(R5)A? IF #NB.SNM NOT.SET.IN N.STAT(R5) ; SKIP COMPARE IF WILD5 PUSH R4,R5 MOV #FN17CH,R5 ; FNB NAME ADD #V.ANSN,R4 ; VCB NAME REPEAT R3 := #17.F$ CMPB (R4)+,(R5)+ ; COMPARE THEM IF RESULT IS NES SEC ; INDICATE ERRORH BR 90$ ; POP AND EXIT  ENDL END " POP R5,R4 ; COMPARED, GO ON TO END ELSE ; VERSION NUMBER;2; COMPAIR FILE NAME UNLESS WILD CARD WAS SPECIFIED;F" IF #NB.SNM NOT.SET.I00 DATADATADATADATADATADATADATAN N.STAT(R5)@ IF V.FNAM(R4) EQ N.FNAM(R5) AND V.FNAM+2(R4) EQ N.FNAM+2(R5)# CMP V.FNAM+4(R4),N.FNAM+4(R5)R) BEQ 10$ ;IT'S A MATCH -- TRY TYPEV END & BR 20$ ;NO MATCH TAKE ERROR EXIT END+10$: ;REF TAG;4; NAME MATCH NOW TRY TYPE UNLESS WILD CARD SPECIFIED; " IF #NB.STP NOT.SET.IN N.STAT(R5) CMP V.FTYP(R4),N.FTYP(R5)R' BNE 20$ ;NO MATCH TAKE ERROR EXIT  ENDI END;J; TYPE MATCH NOW TRY VERSION # UNLESS WILD CARD OR NON-EXPLICT # SEPCIFIED; 7 IF #NB.SVR NOT.SET.IN N.STAT(R5) AND N.FVER(R5) IS GTR IF V.FVER(R4) NE N.FVER(R5)N20$: ;REF TAG RETURN ERROR ENDA ENDT;TA; WE NOW HAVE A MATCH -- UPDATE THE FNB WITH THE "REAL" FILE DATA:@; UNLESS THIS IS NOT THE FIRST FILE SECTION, THEN REWIND VOL SET;I>; NOTE: OLD .FL300 TAPE IS SIGLE VOLUME AND THEREFORE WE DON'T!; MAKE THE CHECK IF VM.OLD IS SET ;E;R ASSUME VM.OLD,200 * IF V.SECN(R4) NE #1 ANDB V.MOU(R4) IS PL $CALL .RWVOL& ON.ERROR ;IF VOL # 1 IS NOT READY$ CALLR .BLOCK ;GO BLOCK PROCESS END$ RETURN ERROR ;ELSE RETURN ERROR ENDR;T.; THIS IS THE FIRST SECTION SO UPDATE THE USER;N PUSH R4,R5* MOV V.SEQN(R4),(R5)+ ; FILE SEQ # -> FID9 IF #NB.ANS SET.IN N.STAT-2(R5) ; (-2, (R5)+ ABOVE)D( PUSH V.FVER(R4) ; HOLD VERSION NUMBER( ADD #V.ANSN,R4 ; POINT TO NAME IN VCB ASSUME N.ANM1,2D REPEAT R2 := #6 ) MOV (R4)+,(R5)+ ; FIRST TWELVE CHARSN ENDU# POP (R5)+ ; GET SAVED VERSION #E ASSUME N.ANM2,24) CMP (R5)+,(R5)+ ; SKIP N.STAT & N.NEXTO MOV (R4)+,(R5)+  MOV (R4)+,(R5)+ $ MOVB (R4)+,(R5)+ ; LAST FIVE CHRS CLC ELSED MOV #1,(R5)+ ; ALWAYS SECN 1  CLR (R5)+ ; ALWAYS RVOL 0 2 LET R4 := R4 + #V.FNAM ;SET PTR AND CLEAR C-BIT! REPEAT R3 := #V.FVER+2-V.FNAM/2  LET (R5)+ := (R4)+ ENDV END90$: ; POP AND EXIT LABEL POP R5,R4E RETURN; .DSABL LSB .END ; FIRST TWELVE CHARSN ENDU# POP (R5)+ ; GET SAVED VERSION #E ASSUME N.ANM0 $BEGIN MBLDHD 0012 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY 0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERNG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDO@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 10-FEB-75; ; +; JRC040 13-NOV-80 IMPLEMENT UNLABELED TAPET;S;P-; JRC041 5-NOV-81 HANDLE ACCESSIBILITY BETTERE;PD; THIS MODULE BUILDS AN "FCS" COMPATABLE HEADER IN THE HEADER BUFFER; ; ; MACRO LIBRARY CALLSO; ; EQUATED SYMBOLS ; ; IMPURE DATA AREA; ; PURE DATA AREA;N H1 .SBTTL .BLDHD -- ROUTINE TO BUILD THE HDR BLOCKT;);+5; THIS ROUTINE BUILDS THE HEADER AND STATISTICS BLOCKE;S; CALL $CALL .BLDHD; #; INPUTS: HDR LABELS IN .LAB1 AND 2S&; OUTPUTS: HEADER AND STAT BLOCK SETUP; VSCB LABEL AREA SETUP;E:; NOTE: V.STAT AND V.STAT+2 ARE USED TO ACCULATE FILE SIZE%; FROM THE FILE'S SECTION BLOCK COUNTS(; THE FIND NAME PROCESSOR INIT THEM TO 07; V.STAT+4 HOLDS START SECTION # ON MULTI SECTION FILESB; SETUP BY .POSIDD; ;A;- .ENABL LSB.BLDHD:: PUSH R0,R1,R2 10$: ;REF TAG  IFB #VM.ULB SET.IN V.MOU(R4) ASSUME V.FATT,<> ASSUME V.RTYP&1,0* IF V.RTYP(R4) IS EQ AND V.RECL(R4) IS EQ% MOV #R.FIX!,V.RTYP(R4)N' MOV #512.,V.RECL(R4) ;SET DEFAULTST END IF V.BLKL(R4) IS EQA MOV 00 0E V.UCB(R4),R1 .IF DF R$$11MM MOV U.CW4(R1),V.BLKL(R4) .IFF ;DF R$$11MR MOV U.C4(R1),V.BLKL(R4)T .ENDC ;DF R$$11M END  ELSE ;IFB #VM...) $CALL .GTFID ;GET LABEL DATA INTO VSCBL $CALL .GTDAT ;GET DATES ECT# $CALL .GTATT ;GET ATTR FROM HDR2E END ;IFB #VM...S;E; MOVE LABELS INTO HEADERU;V" LET R1 := #.LAB1 ! R2 := #.HLAB1 IFB #VM.ULB SET.IN V.MOU(R4) REPEAT R0 := #160./2 CLR (R2)+2 ENDL ELSE REPEAT R0 := #160./2 LET (R2)+ := (R1)+ END. END,;!; FILL IN HEADER AREA AND ID AREA1;. $CALL .FILHD" REPEAT R2 := #5. ! R1 := #.STATC LET (R1)+ := 0 END1 IF V.ATL(R4) IS NEB LET .STATC+C.ACLK := #1*256.+1 ;NOTE FILE AS ACCESSED & LOCKED ELSE;S:; VOLUME IS NOT ACCESSED SO USER IS DOING A TRUE READ ATTR/; SO LETS GET THE TOTAL BLOCK COUNT OF THE FILE:;.5 LET V.PSTA(R4) :== #VP.POS ;FLAG POSITIONING MODE , LET .HFSC := V.STAT+4(R4) ;GIVE USER HIS ;START SECTION #7 WHILEB V.TPOS(R4) GT #1 ;POSITION TO TRAILER LABELSL TMSPACE #1& LET V.TPOS(R4) :== V.TPOS(R4) -1 END." $CALL .RDLB1 ;READIN EOF/V 1 PUSH R3,R5,R4L LET R3 := #.STATC+C.SIZE' LET R4 := #6. ! R5 := #.LAB1+H.BLKC  $CALL .DD2CT; 9; ADD IN THE FILE'S SECTION COUNT TO THE ACCUMLATED VALUE !; AND SAVE IN V.STAT AND V.STAT+2F;E POP R4 ;RESTORE VSCB PTR1 LET PUSH := (R3)+ ! @R3 := @R3 + V.STAT+2(R4)=' LET TOP := TOP + CARRY + V.STAT(R4)T LET V.STAT+2(R4) := @R3(( LET V.STAT(R4) := TOP ! -(R3) := POP POP R5,R3; *; GO GET NEXT FILE SECTION IF THERE IS ONE; 8 IF .LAB1+2 EQ #"V1 ANDB #VM.OLD NOT.SET.IN V.MOU(R4)1 LET V.SECN(R4) := V.SECN(R4) +1 ;BUMP SEC # ( $CALL .RQNXT ;REQUEST NEXT VOLUME( $CALL .VRDOP ;VERIFY CORRECT FILE BR 10$ ;START OVER ENDD END+20$: ;REF TAG POP R2,R1,R0 RETURN;U .DSABL LSB 4 .SBTTL .FILHD -- ROUTINE TO FILL IN THE HEADER BLK;A;+7; THIS ROUTINE FILLS IN THE HEADER BLOCK FROM THE VSCB.O1; IT FILLS IN THE SECTION 0 (HEADER AREA) AND THE 3; 1'ST PART OF THE ID AREA SECTION 1. THE LABEL ARE" ; IS NOT ALTERED BY THIS ROUTINE;; CALL: $CALL .FILHD ;E; INPUTS: CURRENT PROCESS ;C; OUTPUTS: THE HDR IS FILLED IN; !; NOTE R0 R1 AND R2 ARE DESTROYEDE;-.FILHD::/ LET .HFSQ := V.SEQN(R4) ! .HFSC := V.SECN(R4)G; #; GET OWNER AND PROTECTION FROM MVLL; LET R0 := V.MVL(R4)R. LET .HOWN := M.UIC(R0) ! .HPRO := M.PROT(R0)* MOVB V.FABY(R4),R0 ; PICK UP ACCESS BYTE IFB #40 NE R0 ; IF NON-SPACE  SWAB R0 ; IT'S MEANINGFUL( BIS #377,R0 ; CONVERT TO OUR FORMAT MOV R0,.HPRO ; AND STORE ITU END; ; GET RECORD ATTRIBUTES;N ASSUME V.FATT,<> ASSUME V.RTYP&1,0I LET .HFATT := V.RTYP(R4) LET .HRSIZ := V.RECL(R4);L; FILL IN THE ID AREAS;(' LET R0 := #.HFNM ! R1 := R4 + #V.FNAME! REPEAT R2 := #V.FVER-V.FNAM/2+1E LET (R0)+ := (R1)+ END ;M.; FILL IN THE CREATION/EXPRIATION DATE STRINGS;0 LET R1 := R4 + #V.CDAT $CALL .DAT5A <#.HCDT,R1> ASSUME V.EDAT,<> $CALL .DAT5A <#.HEDT,R1> RETURN;O .END MOV R0,.HPRO ; AND STORE ITU END; ; GET RECORD ATTRIBUTES;N ASSUME V.FATT,<> ASSUME V.RTYP&1,0I LET .HFATT := V.RTYP(R4) LET .HRSIZ := V.RECL(R4);L; FILL IN THE ID AREAS;(' LET R0 := #.HFNM ! R1 := R4 + #V.FNAME! REPEAT R2 := #V.FVER-V.FNAM/2+1E LET (R0)+ := (R1)+ END ;M.; FILL IN THE CREATION/EXPRIATION DATE STRINGS;0 LET R1 := R4 +. $BEGIN MCRFIL 0021 F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED @; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTIC00DATADATADATADATADATADATADATAE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; :; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC;E;;N $VERSIONS; ; E.H. MARISON 12-DEC-75; ; J. CLEARY 4-DEC-78; ;; JC023 -- FIX PROBLEM IN EOT DETECTION WHEN WRITING LABELSN; ;H; JOHN R. COVERT 26-MAR-79*; JRC010 -- ENHANCE TASK ABORT PROCEDURE; ; JOHN R. COVERT - 15-NOV-80$; JRC040 -- IMPLEMENT UNLABELED TAPE; '; JOHN R. COVERT - 26-DEC-80, 26-FEB-81N-; JRC045 -- IMPLEMENT 17 CHARACTER FILE NAMESC;R,; JOHN R. COVERT - 5-NOV-81 (GUY FAWKES DAY)&; JRC066 -- GUARANTEE SYMMETRIC LABELS;M(; THIS MODULE IMPLEMENTS THE CREATE QI/O;S;S; MACRO LIBRARY CALLS-;- .MCALL NBOFF$ NBOFF$ DEF$L ; C; ********************** TEMPORARY -- UNTIL SYSTEM-WIDE DEFINITION N.ANM1=2E N.ANM2=24 NB.ANS=2000$; *********************************;N; EQUATED SYMBOLS-;; IMPURE DATA AREA;N ; SCRATCH FNB USED DURING CREATE;2.CRFNB:: .BLKB S.FNB;R;5; PURE DATA AREA;A R;L;+(;THIS ROUTINE IMPLEMENTS THE CREATE QI/O+;FIRST THE PARAMETERS ARE CHECKED AND IF OK 5;THE ACCESS CONTROL BITS AC.RWD AND AC.POS ARE TESTEDS;S2;IF AC.RWD THE VOLUME SET IS REWOUND AND THE FIRST,;FILE POSITION IS THE TARGET CREATE POSITION0;IF AC.RWD IS NOT SET BUT AC.POS IS SET THEN THE1;NEXT FILE POSITION IS THE TARGET CREATE POSITION*/;IF BOTH AC.RWD AND AC.POS ARE CLEARED THEN THED$;VOLUME SET IS POSITIONED TO THE END*;AND WE ARE CREATING A NEW FILE AT THE END&;OF THE VOLUME SET. THE HEADER LABELS,;ARE WRITTEN USING USER SPECIFIED ATTRIBUTES;;(IF NO EXPIRATION DATE IS SPECIFIED IT IS "TODAYS" DATE IEA4;THE CREATION DATE). USER HEADER LABELS MAY ALSO BE6;WRITTEN IF REQUESTED. THE FILE IS THEN "CLOSED" WITH:;A "NULL" DATA SECTION AND EOF1 AND EOF2 LABEL FOLLOWED BY8;TWO TAPE MARKS. THE VOLUME IS THEN POSITIONED IN FRONT;OF THE NEWLY CREATED FILE.P;A;- .ENABL LSB.CRFIL::; 1; IF WE GOT TANGLED UP WITH EOT THE SKIP ALL THISW;L CMPB #VP.WM,V.PSTA(R4) BEQ 25$E IFB #VP.UCM EQ V.PSTA(R4)U JMP UCMC ENDT .IF DF R$$11M  LET R0 := R5 + #I.FIDP+2 .ENDCO .IF DF R$$11DT LET R0 := R5 + #I.FIDP .ENDCE$ IF (R0)+ IS NE ;MUST HAVE FID PTR% LET R0 := R0 + #6 ;BUMP TO ACCESSU& IF (R0)+ IS PL ;NO ACCESS ALLOWED BR 10$ END  END  ;EVER WE HAVE AN ERROR ) ERROR IE.BAD 10$: ;REF TAGC;L<; PICK UP 17 CHARACTER NAME FROM FILE NAME BLOCK, IF PRESENT;  MOV #V.ANSN,R1) ADD R4,R1 ; POINT TO ANSI NAME IN VSCB4+ CLR (R1) ; INDICATE NO ANSI NAME PRESENT ( MOV R5,R0 ; GET READY TO LOOK AT FILE% ADD #I.FNBP,R0 ; NAME BLOCK POINTER  IF (R0) IS NE+) PUSH R1 ; SAVE ANSI-NAME VCB POINTER0( MOV #.CRFNB,R1 ; GET SCRATCH POINTER! PUSH R1 ; WILL NEED IT LATER $CALL .BLXI POP R1,R0 IF #NB.ANS SET.IN N.STAT(R1) ASSUME N.ANM1,2E TST (R1)+K# PUSH R0 ; SAVE FOR LATER USEB/ REPEAT R2 := #6 ; FIRST TWELVE CHARACTERSR MOV (R1)+,(R0)+N ENDL ASSUME N.ANM2,24 MOV #.CRFNB+N.ANM2,R1 MOV (R1)+,(R0)+ MOV (R1)+,(R0)+* MOVB (R1)+,(R0)+ ; LAST 5 CHARACTERS' POP R0 ; PTR TO NAME FOR VERIFY ) $CALL .ANVFY ; MAKE ALL CHRS LEGAL  END; ENDE;I3;CHECK FOR "CREATE" CAPABILITY (IE VM.BYP+VM.OLD=0)R;% IFB #VM.BYP!VM.OLD SET.IN V.MOU(R4) ; ERROR IE.PRI  ENDS- LET V.PSTA(R4) :== #VP.SM ;FLAG SEARCH MODET;R;POSITION VOLUME SET FOR CREATE ;L IFB #AC.RWD SET.IN I.ACTV(R5)O $CALL .RWVOL ON.ERROR CALLR .BLOCK END+ ELSE% IFB #AC.POS NOT.SET.IN I.ACTV(R5)E% IFB #VM.ULB NOT.SET.IN V.MOU(R4)R $CALL .POSENDV' BCS 30$ ;000E EXIT ON ERROR ;JRC010N END END" END " IFB #VM.ULB NOT.SET.IN V.MOU(R4) $CALL .NXHDR ;CHECK EXPIRATION DATE ;IF LABELED TAPE20$: ;REF TAG $CALL .RDLB1 ON.NOERROR $CALL .VHDR1 BCS 20$ ;READ TILL HDR1S+ $CALL .EXPDT ;CHECK EXPIRATION DATET& BCS 30$ ;EXIT IF NOT EXPIRED ENDL ;BACKSPACE OVER HDR1 ;OR TAPE MARKE LET .MTDPB+M.TPRM := #-1 MTQIO IO.SPB# ;TAKE CARE OF DUMMY FILE CASE 8 IF V.SEQN(R4) IS EQ THEN V.SEQN(R4) := V.SEQN(R4) +1; ; ON CREATE, WE WRITE ALL LABELS;)( BIC #V2.XH2!V2.XH3!V2.XF1,V.MST2(R4);A1; ZERO SECTION BLOCK COUNT BEFORE WRITTING LABELS ;L+ LET V.BLKC(R4) := 0 ! V.BLKC+2(R4) := 0$ $CALL .WATTR ;WRITE HEADER ETC BCS 30$ ;EXIT ON ERRORSI MTQIO IO.EOF ;WRITE A TM;F; WRITE OUT THE TRAILER LABELS;S*25$: $CALL .EOFLB ;CLOSE OUT THE FILE$ $CALL .RDSTS ; GET UNIT STATUS. IFB #TP.EOT SET.IN ..IOST+2 ;AT EOT? ;JC023* TMSPACE #-2 ; YES REPOS AND ;**-1% $CALL .EOTP ; WRITE OUT EOV'SA+ BR 25$ ; IF WE COME BACK START OVER2 END' TMSPACE #-4 ;POSITION TO IN FRONTG $CALL .RDSTS ;OF NEW FILE: ON.ERROR ; AT BOT$ TMSPACE #1 ; NO SKIP OVER TM END0 ELSE ;UNLABELED TAPE PROCESSING0 $CALL .WATTR ; HANDLE ATTRIBUTES, NO LABELS4 IFB #R.FIX NE V.RTYP(R4) ; WE ONLY SUPPORT R.FIX* MOVB #R.FIX,V.RTYP(R4) ; SET IT BACK) ERROR IE.BTP ; AND EXIT WITH ERRORP END 3 MOVB #VP.UCM,V.PSTA(R4) ; FLAG UNLABELED CREATEU*UCM: MOV R4,R0 ; PASS THE FILE NAME TO- ADD #V.ANSN,R0 ; THE UNLABELED POSITIONERO) $CALL .POSUL ; POSITION BY FILE NAMEF END ;N;SEND USER THE FID; - LET R0 := R4 + #V.SEQN ! R1 := R5 + #I.FIDPL $CALL .BLXO R30$: ;REF TAG  RETURN .ENDRIBUTES, NO LABELS4 IFB #R.FIX NE V.RTYP(R4) ; WE ONLY SUPPORT R.FIX* MOVB #R.FIX,V.RTYP(R4) ; SET IT BACK) ERROR IE.BTP ; AND EXIT W2 $BEGIN MEOFLB 0010 < EOF LABEL WRITTING ROUTINES>F; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICEB; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENTG; CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY)0; FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL.G; THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASERRG; UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIEDE@; (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN@; SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY ; DIGITAL.E; DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE E; OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BYU ; DIGITAL.;; COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION ; <; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE 1 0- MAPREF.MAC;R; ;E $VERSION ; ; E.H. MARISON 12-DEC-75;EB; REVISION # +01 CALL NEW TRAILER LABEL ROUTINE INSTEAD OF .WATTCM; 8; THIS MOUDULE CONTAINS THE EOF LABEL WTITTING PROCESSOR; ; ; MACRO LIBRARY CALLSA; ; EQUATED SYMBOLSN; ; IMPURE DATA AREA; ; PURE DATA AREA;S; R .SBTTL .EOFLBT; ;+; END OF FILE LABEL PROCESSORP; 6; THIS PROCESSOR IS CALLED WHEN THE OPEN FILE IS WRITE*; ACCESSED AND IT IS NOW BEING DEACCESSED.; *; IF TAKE THE CURRENT PROCESS AS INPUT AND ; PRODUCES THE FOLLOWING OUTPUT:; A TAPE MARK IS WRITTEN ;I-; 1.) EOF1 AND EOF2 WRITTEN BASED UPON LABELA; DATA IN VSCBH'; 2.) USER LABELS WRITTEN IF REQUESTEDG&; 3.) TWO TAPE MARKS WRITTEN AND TAPE; POSITIONED BETWEEN THEM; ;E; NOTE V.TPOS IS UPDATED; -A.EOFLB::2 LET V.PSTA(R4) :== #VP.WM ; SET STATUS TO WRITE $CALL .CLOT1 ;START CLOSE# $CALL .WATRL ; +01 GO WRITE USERE ; TRAILER LABELS IF REQ* CALLR .TRMVOL ; GO TERMINATE THE VOLUME;S .ENDUT AND ; PRODUCES THE FOLLOWING OUTPUT:; A TAPE MARK IS WRITTEN ;I-; 1.) EOF1 AND EOF2 WRITTEN BASED UPON LABELA; 00"?8DATADATADATADATADATADATADATA- $BEGIN MPOSUL 0003 H; 6; COPYRIGHT (c) 1981 BY DIGITAL EQUIPMENT CORPORATION.; ALL RIGHTS RESERVED.; <; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED>; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.; ;D9; MUST BE ASSEMBLED WITH SYSTEM PREFIX FILE -- MAPREF.MAC ;N $VERSION ;N%; JOHN R. COVERT 22-NOV-80, 12-APR-81E;SD; THIS MODULE POSITIONS UNLABELED TAPE BASED ON INFO IN THE FILENAME;T R;:;+>; THIS MODULE IS CALLED BY CREATE-FILE AND BY FIND-FILE IN THE>; UNLABELED TAPE CASE. IT WILL OPTIONALLY REWIND THE TAPE AND:; ALSO SPACE THE TAPE FORWARD A SPECIFIED NUMBER OF FILES.;R; CALL: $CALL .POSUL; R0=POINTER TO FILE NAMEE7; THE POINTER IS TO 17 CHARACTER ANSI NAME OF THE FORM; "POS=RNNNN".E%; THE OPTIONAL R MEANS REWIND FIRST..3; THE OPTIONAL NNNN IS THE NUMBER OF TAPE MARKS TO ; SPACE FORWARD.H4; ANY NUMBER OF ZEROS MAY APPEAR TO THE LEFT OF THE6; NUMBER OF FILES TO SKIP, BUT THE NUMBER MAY ONLY BE5; FOUR DECIMAL DIGITS. IF THE NUMBER IS LONGER THANS/; FOUR NON-ZERO DIGITS, NO SPACING WILL OCCUR.O;A<; IF THE FIRST CHARACTER IS AN R, WE WILL REWIND THE VOLUME.;; IF THE NEXT CHARACTERS ARE NUMERIC, WE WILL SPACE FORWARDO; THAT NUMBER OF TAPE MARKS.;-; .ENABL LSB.POSUL::# IF #"PO NE (R0)+ OR #"S= NE (R0)+T' RETURN ; POSITIONING NOT REQUESTEDR END PUSH R3,R5,R4H& IFB #'R EQ (R0) ; SHOULD WE REWIND?& MOV (SP),R4 ; RESTORE VCB POINTER $CALL .RWVOL ; YESL ON.ERROR1 CALLR .BLOCK ; AND WAIT UNTIL WE START OVERF ENDE% INC R0 ; POINT TO NEXT CHARACTER ENDE1 WHILEB #'0 EQ (R0) ; SKIP ANY NUMBER OF LEADING. INC R0 ; ZEROES ENDE PUSH R0E CLR R4& WHILEB #'0 LE (R0) ANDB #'9 GE (R0)+ INC R4 ENDL1 IF R4 IS NE AND #4 GE R4; WE HAVE A SPACE COUNT& MOV (SP),R5 ; WHERE IT COMES FROM MOV SP,R3 ; WHERE WE PUT IT $CALL .DCCVT ; CONVERTN MOV (SP),R0R BEGIN BLOCKP WHILE R0 IS NE" TMSPACE #1 ; MOVE A SPACE ON.ERROR LEAVE BLOCK ENDN DEC R05 $CALL .ABOCK ; CHECK FOR AN ABORT OF OUR TASK) ON.ERROR' SETERR IE.ABO ; WE HAVE BEEN ABORTEDE LEAVE BLOCK ENDL ENDR END 0 END S TST (SP)+ ; POP STACK POP R4,R5,R3 RETURN;R .ENDRE IT COMES FROM MOV SP,R3 ; WHERE WE PUT IT $CALL .DCCVT ; CONVERTN MOV (SP),R0R BEGIN BLOCKP WHILE R0 IS NE" TMSPAC .IDENT /03/;SE; COPYRIGHT (C) 1975, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.TE; COPYRIGHT (C) 1974, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.Y;DA; THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE.@; ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION@; OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT1; AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC.,;,@; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT@; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL; EQUIPMENT CORPORATION.; @; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY?; OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.C;E ; VERSION 01; E. H. MARISON 24-DEC-74E;M; ELLEN R SIMICH 21-JAN-76;(2; R$$11M -- IF DEFINED ASSEMBLY FOR RSX-11M AND IF;S!; DEFAULT ASSEMBLY IS FOR RSX-11DO .IIF NDF,R$$11M,R$$11D=1N;Y;C .MACRO MTADF$ .ASECTN; '; ANSI MAGTAPE SPECIFIC DATA STRUCTUREST; 5; VOLUME SET CONTROL BLOCK OFFSET DEFININTIONS (VSCB)D;T(; VOLUME SET AND PROCESS CONTROL SECTION;M.=0 % V.TCNT: .BLKW 1 ;TRANSACTION COUNTA( V.NXT: .BLKW 1 ;PTR TO NEXT VSCB NODE* V.MVL: .BLKW 1 ;PTR TO MOUNTED VOL LIST, V.UVL: .BLKW 1 ;PTR TO UNMOUNTED VOL LIST- V.ATL: .BLKW 1 ;ATL ADDR OF ACCESSING TASKA ; TCB IN RSX11M- V.UCB: .BLKW 1 ;ADDR OF CURRENT UCB OR PUD* V.RVOL: .BLKB 1 ;CURRENT RELATIVE VOL #" V.MOU: .BLKB 1 ;MOUNT MODE BYTE= V.TCHR: .BLKW 1 ;UINT CHAR. FOR ALL UNITS USE00?;0E D FOR VOL SETE+ V.SEQN: .BLKW 1 ;CURRENT FILE SEQUENCE #P* V.SECN: .BLKW 1 ;CURRENT FILE SECTION #8 V.TPOS: .BLKB 1 ;POSITION OF TAPE IN TM'S TO NXT HDR1' V.PSTA: .BLKB 1 ;PROCESS STATUS BYTEO3 V.TIMO: .BLKW 1 ;BLOCKED PROCESS TIMEOUT COUNTERO0 V.STAT: .BLKW 3 ;STATUS WORDS USED BY COMMAND ;EXECUTION MODULESM V.SPAR:'L'-V.TRTB:'L' .BLKB 1 ;TRANSLATION CONTROL BYTE. .BLKB 1 ;SPARE (FOR NOW)#;V; LABEL DATA SECTION;D V.BLKL: .BLKW 1 ;BLOCK LENGTH! V.RECL: .BLKW 1 ;RECORD LENGTHE V.FNAM: .BLKW 3 ;FILE NAMEI V.FTYP: .BLKW 1 ;FILE TYPE1" V.FVER: .BLKW 1 ;FILE VERSION #! V.CDAT: .BLKW 2 ;CREATION DATES# V.EDAT: .BLKW 2 ;EXPRIATION DATEC0 V.BLKC: .BLKW 2 ;BLOCK COUNT FOR FILE SECTION V.RTYP: .BLKB 1 ;RECORD TYPEL8 V.FATT: .BLKB 1 ;FILE ATTRIBUTES FOR CARRIAGE CONTROL;M; NULL WINDOW SECTION';L V.WIND: .BLKW 2 CB V.WINC=V.WIND+0 ;ERS OFFSET IN NULL WINDOW FOR CONTROL SWECTION .BLKW 4 ;SAME AS THE OTHERS ;*****V1V.ANSN:'L' .BLKB 17. ;ANSI 17 CHARACTER FILE NAME #V.BOFF:'L' .BLKB 1. ;BUFFER OFFSETE/ .BLKW 21. ;RESERVE SPACE FOR DEVELOPMENT WORKA ;*****2S.VSCB=. ;SIZE OF VSCB:;L); DEFINE OFFSETS INTO NULL WINDOW SECTION ;L8; **** W.CTL IS DEFINED IN F11MAC.MAC (F11DF$) IT IS THE3; CONTROL SECTION OF THE WINDOW AND FILE MAPREF.MACC7; DEFINES IT AS 0 (W.CTL=0) FOR THE ANSI MAGTAPE SYSTEMC1; IF THIS SYMBOL IS CHANGED IN F11MAC.MAC IT WILL (; NEDD TO BE CHANGED IN MAPREF.MAC ****;T;S/; MOUNTED VOLUME LIST OFFSET DEFININTIONS (MVL)E;I.=0M .IF DF R$$11M, M.NXT: .BLKW 1 ;PTR TO NXT MVL NODE (11M) .ENDC) M.UIC: .BLKW 1 ;OWNER UIC FROM RVOL #1 " M.CH: .BLKW 1 ; U.CH/U.VP (11D)* M.PROT: .BLKW 1 ;PROTECTION U.AR IN 11D .IF NDF R$$11M1 .BLKW 2 ; ACP WORDS 11D - M.NXT: .BLKW 1 ;PTR TO NEXT MVL NODE (11D)A .ENDC4 M.RVOL: .BLKB 1 ;RELATIVE VOL # OF MOUNTED VOLUME! M.STAT: .BLKB 1 ;VOLUME STATUSA% M.VIDP: .BLKW 1 ;VOLUME ID POINTERN+ M.UCB: .BLKW 1 ;ADDR OF ASSOC UCB OR PUDSS.MVL=. ;SIZE OF MVL NODEI;=<; UNMOUNTED VOLUME AND VOLUME LIST OFFSET DEFINITIONS (UVL);.=0C& L.NXT: .BLKW 1 ;PTR TO NXT UVL NODE1 L.VOL1: .BLKB 1 ;REL VOL # OF 1'ST VOL IN NODE.1 L.VOL2: .BLKB 1 ;REL VOL # OF 2'ND VOL IN NODE. L.VID1: .BLKB 6 ;VOL ID OF 1'ST VOL IN NODE. L.VID2: .BLKB 6 ;VOL ID OF 2'ND VOL IN NODES.UVL=. ;SIZE OF UVL NODE;E;O&; SYSTEM DATA STRUCTURE CONTENT VALUES;M ; VSCB VALUES;; V.MOU VALUES: VM.OLD=200 ;OLD .FL300 VOLUME -- VM.BYP WILL ALSO BE SET% VM.BYP=100 ;BYPASS LABEL PROCESSINGU VM.ULB=40 ;UNLABELED TAPEF' VM.FSC=20 ;OVERRIDE FILE SET ID CHECK + VM.EXC=10 ;OVERRIDE EXPRIATION DATE CHECKE,; V.PSTA VALUES - UNBLOCKED TRANSITION STATE VP.RM=2 ;READ DATA MODE VP.WM=4 ;WRITE DATA MODED2VP.UCM ='B' 6 ;UNLABELLED CREATE POSITIONING MODE VP.SM=10 ;SEARCH MODE  VP.MOU=20 ;MOUNT MODE VP.RWD=40 ;REWIND WAIT> VP.POS=100 ;PROCESS IN POSITIONING MODE (MULTI-SECTION FILE)) VP.ABO=140 ;ABORT PROCESS (I/O RUNDOWN)S;E6; BLOCKED STATE = -(UNBLOCKED TRANSITION STATE VALUES);U;PROCESS TIMED OUT BIT 0 = 1 VP.TO=1;S;I%; NULL WINDOW CONTROL BIT DEFINITIONSI;D WI.RDV=400 ;ACCESSED FOR READ" WI.WRV=1000 ;ACCESSED FOR WRITE# WI.EXT=2000 ;ACCESSED FOR EXTEND  WI.LCK=4000 ;LOCKED;;;E ; MVL VALUES;I! MS.VER=200 ;VOL ID NOT VERIFIED ) MS.RID=1 ;VOL ID TO BE READ NOT CHECKEDW' MS.NMO=2 ;MOUNT MESSAGE NOT GIVEN YETO' MS.TMO=4 ;ONE TIMEOUT ALREADY EXPRIED4* MS.EXP=10 ;EXPIRATION DATE MESSAGE GIVEN; ;T ;DEFINE THE VOLUME LABEL OFFSETS;E .=0' H.VOL1: .BLKB 4. ;LABEL ID AND NUMBER H.VID: .BLKB 6. ;VOLUME ID& H.VACC: .BLKB 1. ;VOLUME ACCESS BYTE$ H.VRS1: .BLKB 26. ;RESERVED AREA 1$ H.VOID: .BLKB 14. ;VOLUME OWNER ID$ H.VRS2: .BLKB 28. ;RESERVED AREA 2* H.VLSV: .BLKB 1. ;LABEL STANDARD VERSION;D&; DEFINE THE HEADER/TRAILER #1 OFFSETS;A .=0' H.HDR1: .BLKB 4. ;LABEL ID AND NUMBERI H.FID: .BLKB 17. ;FILE IDE H.FSID: .BLKB 6. ;FILE SET ID ' H.SECN: .BLKB 400?CEEDATADATADATADATADATADATADATA. ;FILE SECTION NUMBERD( H.SEQN: .BLKB 4. ;FILE SEQUENCE NUMBER% H.GENN: .BLKB 4. ;GENERATION NUMBER- H.GENV: .BLKB 2. ;GENERATION VERSION NUMBER1! H.CDAT: .BLKB 6. ;CREATION DATEL# H.EDAT: .BLKB 6. ;EXPIRATION DATEL# H.FACC: .BLKB 1. ;FILE ACESS BYTEL H.BLKC: .BLKB 6. ;BLOCK COUNT: H.SYSC: .BLKB 13. ;SYSTEM CODE H.RS1: .BLKB 7. ;RESERVEDI; &; DEFINE THE HEADER/TRAILER #2 OFFSETS;A .=0' H.HDR2: .BLKB 4. ;LABEL ID AND NUMBERE! H.RECF: .BLKB 1. ;RECORD FORMAT H.BLKL: .BLKB 5. ;BLOCK LENGTH! H.RECL: .BLKB 5. ;RECORD LENGTHQ* H.SYSD: .BLKB 35. ;SYSTEM DEPENDENT AREA! H.BOFF: .BLKB 2. ;BUFFER OFFSETA H.RS2: .BLKB 28. ;RESERVED;LA; DEFINE OFFSETS INTO THE SYSTEM DEPENDENT AREA IN HDR2/EOF2/EOV2C;.); ALL REFERENCES ARE RELATIVE TO (H.STSD)6;; .=0$ H.SYR1: .BLKB 21. ;RESERVED AREA 1% H.CCHR: .BLKB 1. ;CONTROL CHAR CODE % H.STR2: .BLKB 13. ;RESERVED AREA #2A;. .PSECTR' .MACRO MTADF$ ;GET BACK SYMBOL SPACEC .ENDM .ENDMCORD FORMAT H.BLKL: .BLKB9 $BEGIN MWRLAB 0024