ASMB,Q,C * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * **************************************************************** * HED PLOG--DS/1000 REQUEST/REPLY BUFFER LOGGING PROGRAM NAM PLOG,19,30 91750-16147 REV 2013 801013 ALL * * NAME: PLOG * * RELOC: 91750-16147 * * SOURCE: 91750-18147 * * PRGR: C. JONAS * * MOD BY: DWT AUG 1978 * CWJ 801013 ENFORCE NON CLONABILITY! * SUP * * THIS PROGRAM IS A SYSTEM DIAGNOSTIC TOOL WHICH PRODUCES A BINARY LOG * OF REQUEST AND REPLY BUFFERS PASSED TO THE NODE OF A DISTRIBUTED SYSTEM * IN WHICH PLOG IS RUNNING. * * SCHEDULING SEQUENCE: * * *RU,PLOG[,CONSOLE LU[,LOG NAMR[,DATA FLAG[,# OF BUFFERS[,DEBUG]]]]] * * WHERE: * CONSOLE LU = (INTERACTIVE) LU # FOR ERROR AND MESSAGE LOGGING. * = -1 IF THE PROGRAM IS SCHEDULED TO CLEAN UP. * DEFAULT IS THE SCHEDULING TERMINAL. * LOG NAMR = LU, IF A TAPE-LIKE DEVICE (MAG. TAPE, CTU, ECT.) * IS TO BE USED AS LOG MEDIUM, OR * = NAMR (IN THE FORM NAME:SECURITY:CARTRIDGE), IF A * FILE IS TO BE USED AS LOG MEDIUM. PLOG WILL * CREATE THE FILE NAMR AND ASSIGN FILE TYPE AND SIZE. * = -1 IF THE CLEAN UP DOES NOT INCLUDE THE LOG FILE. * DEFAULT IS DISC FILE 'PLOG:DS. * DATA FLAG = 0, IF NO DATA FROM REQUEST/REPLY BUFFERS IS TO BE * SAVED, OR * = NON-ZERO, IF DATA FROM REQUEST/REPLY BUFFERS IS TO BE * SAVED. * DEFAULT IS NO DATA. * # OF BUFFERS = # OF MOST RECENT REQUEST/REPLY BUFFERS TO LOG IF * DISC IS LOG MEDIUM. * DEFAULT IS 300 BUFFERS. * DEBUG NON-ZERO WILL SET THE DEBUG FLAG (BIT 9 IN #TYPE). * * * PLOG HANGS ON CLASS #PLOG THROUGH WHICH REQUEST/REPLY BUFFERS ARE * RETHREADED BY THE DISTRIBUTED SYSTEM SOFTWARE. PLOG KEEPS A RECORD OF * ITS RESOURCES IN CONSISTING OF #PLOG, ITS CLASS NUMBER, #PRN, ITS * RESOURCE NUMBER, #TYPE, THE LOG TYPE WORD, BITS OF WHICH, IF SET, * MEAN: * * ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! * !--15--14--13--12--11--10---9---8---7---6---5---4---3---2---1---0 * ^ ^ ^ !<----------LOG LU #----------->! * ! ! ! * DISC FULL DATA * LOG BUFFER LOGGED * * AND, IF DISC LOG, #RECS, #SIZE, AND #CRNT, THE RECORD SIZE, * # OF BLOCKS, AND THE CURRENT RECORD NUMBER, RESPECTIVELY * SPC 3 EXT #PLOG,#PKUP,#GETR EXT $TIME,EXEC,IFBRK,KCVT EXT CLOSE,CREAT,OPEN EXT POST,PURGE,RNRQ,WRITF EXT CLRQ EXT PNAME * #CLAS DEF #PLOG CLASS # #PRN DEF #PLOG+1 RESOURCE # #TYPE DEF #PLOG+2 TYPE & LOG LU #RECS DEF #PLOG+3 RECORD SIZE #SIZE DEF #PLOG+4 # OF DISC BLOCKS #CRNT DEF #PLOG+5 CURRENT RECORD # SKP * GLBLK-START * * ****************************************************************** * * * G L O B A L B L O C K REV XXXX 790531 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, LSTEN, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * * ****************************************************************** * ***!!!!! THE FIRST 7 WORDS (#STR THRU #ENO) MUST BE FIXED !!!!!*** #STR EQU 0 STREAM WORD. #SEQ EQU #STR+1 SEQUENCE NUMBER. #SRC EQU #SEQ+1 SOURCE NODE #. #DST EQU #SRC+1 DEST. NODE #. #EC1 EQU #DST+1 REPLY ECOD1. #EC2 EQU #EC1+1 REPLY ECOD2. #ENO EQU #EC2+1 NUMBER OF NODE REPORTING ERROR. * #ECQ EQU #ENO+1 ERROR CODE QUALIFIER (BITS 4 TO 7) #LVL EQU #ECQ MESSAGE FORMAT LEVEL (BITS 0 TO 3) #MAS EQU #LVL+1 MA "SEND" SEQ. # #MAR EQU #MAS+1 MA "RECV" SEQ. # #MAC EQU #MAR+1 MA "CANCEL" FLAGS #HCT EQU #MAC+1 HOP COUNT #SID EQU #HCT+1 SESSION ID WORD * #EHD EQU #SID LAST ITEM OF HEADER #MHD EQU #EHD+1 MINIMUM HEADER SIZE #REQ EQU #MHD START OF REQUEST SPECIFIC AREA #REP EQU #MHD START OF REPLY SPECIFIC AREA * #MXR EQU #MHD+24 <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>> #LSZ EQU 2 <<< SIZE OF LOCAL APPENDAGE AREA >>> * ****************************************************************** * * GLBLK-END SKP PLOG EQU * * * PICK UP PARAMETERS * JSB #PKUP DEF *+4 DEF PMASK DEF INLU DEF DEFLU * * CHECK IF ENTRY TO CLEAN UP * LDA INLU LOAD CONSOLE LU STA CFLG SET THE CLEAN UP FLAG SSA,RSS NEGATIVE LU? JMP SETIN NO, GO SETUP PARAMETERS LDB DEFLU YES STB INLU * INA,SZA IF INLU WAS -1, DO CLEAN UP JMP INERR ELSE, IT IS AN INPUT LU ERROR * JSB CLONE IF THIS IS A CLONE OF PLOG, TERMINATE HIM * LDA #PLOG LOAD CLASS NUMBER FOR CLEAN UP STA CLNUM LDA OUTLU LOAD LOG NAMR SSA,RSS NEGATIVE ALSO? JMP SETLG .NO, GO CLEAN UP LOG FILE JMP TERM2 .YES, LOG FILE IS NOT CLEANED UP * * SET UP CONSOLE LU * SETIN LDB DEFLU LOAD DEFAULT LU SZA,RSS IS CONSOLE LU ZERO? STB INLU YES, USE DEFAULT * JSB CLONE IF THIS IS A CLONE OF PLOG, TERMINATE HIM * * CHECK IF THE CLASS NUMBER WAS NOT CLEANNED UP * LDA #PLOG SZA JMP CUERR * * SET UP LOG NAMR * SETLG LDA PTYPE LOAD DEVICE TYPE SZA,RSS JMP DEFNA JUMP IF DEFAULT (USE 'PLOG) CPA D1 CHECK IF TAPE LU JMP TAPLU DSCLU LDA =B100000 WITH DISC,BIT 15 OF #TYPE = 1 STA #TYPE,I JMP CHKCL TAPLU LDA OUTLU SZA,RSS OUTLU = 0? JMP DEFNA .YES, USE DEFAULT SSA NEGATIVE LOG LU? JMP LUERR .YES, LOG LU ERR IOR B100 .NO, SET BIT TO OUTPUT STA OUTBI AS BINARY STA #TYPE,I WITH TAPE, #TYPE = LOG LU JMP CHKCL DEFNA LDA PLNAM STA NAME DLD PLNAM+1 DST NAME+1 LDA PLSEC STA SEC LDA PLCRN STA CRN LDA =B100000 STA #TYPE,I * * CHECK IF ENTRY TO CLEAN UP LOG FILE * CHKCL EQU * LDA CFLG GET CLEAN UP FLAG INA,SZA CLEAN UP CALL? (A = -1) JMP SETDF .NO, JMP TO SET UP DATA FLAG JSB OPEN .YES, OPEN LOG FILE FOR CLEAN UP PURPOSE DEF *+7 DEF IDCB DEF IERR DEF NAME DEF D3 DEF SEC DEF CRN SSA ANY ERROR? JMP TERM2 .YES, JUST CLEAN UP CLASS # JMP TERM1 .NO, JMP TO CLEAN UP * * SET UP DATA FLAG * SETDF CLA LDB DATAF GET DATA FLAG SZB IS IT SET? LDA =B400 YES--SET FLAG IOR #TYPE,I AND MAKE IT BIT EIGHT IN #TYPE STA #TYPE,I * CLA SZB,RSS DATA FLAG? STA DAMAX NO, DATA LENGTH = 0 LDA RQMAX LOAD HEADER LENGTH ADA DAMAX ADD DATA LENGTH ADA D3 ADD 3 WORD TO HOLD TIME AND HEADER LENGTH INFO. SZB ANY DATA? INA YES, ADD 1 MORE WORD TO HOLD DATA LENGTH INFO. STA PKLEN STORE AS RECORD SIZE STA #RECS,I SAVE RECORD SIZE LOCALLY & IN RES * * CHECK # OF BUFFER * LDA SIZE GET PASSED SIZE SSA IS IT NEGATIVE? JMP SZERR .YES, ERROR * * SET UP DEBUG FLAG * CLA LDB DEBUG GET DEBUG FLAG SZB IS IT SET? LDA =B1000 YES, SET FLAG IN #TYPE IOR #TYPE,I STA #TYPE,I * * (A) ALLOCATE CLASS NUMBER * CLA STA CLNUM JSB CLRQ GET CLASS WORD DEF *+4 DEF FUNC1 GET CLASS W/ NW, NA DEF CLNUM RETURN NEW CLASS # DEF D0 NO CLASS OWNERSHIP JMP CLALL ERROR RETURN SZA CLASS ALLOCATED? JMP CLALL NO--INFORM USER THEN TERMINATE LDA CLNUM GET ALLOCATED CLASS NUMBER IOR NDEAL SET SAVE CLASS # BIT STA CLNUM AND SAVE FOR DEALC USE * * (B) ALLOCATE RESOURCE NUMBER * JSB RNRQ DEF *+1+3 RETURN ADDRESS DEF ALLOC ALLOCATE GLOBALLY, NO WAIT,NO ABORT DEF #PLOG+1 RESOURCE # STORAGE LOCATION DEF STAT PLACE HOLDER--UNUSED JMP RNALL ERROR RETURN LDA #PRN,I IF #PRN = 0, SZA,RSS RN UNAVAILABLE JMP RNALL IF SO, INFORM USER AND TERMINATE SPC 2 * * (C) ALLOCATE LOG DEVICE/FILE * LDA #TYPE,I DISK LOG FLAG SET? SSA JMP DISC1 YES--BRANCH TO CREAT * JSB EXEC NO--WRITE OUT #TYPE & #RECS WORDS HEADER TO TAPE DEF *+1+4 RETURN POINT DEF NA2 WRITE, NO ABORT DEF OUTBI LOG LU # DEF #PLOG+2 HEADER ADDRESS DEF D2 TWO WORDS LONG DEF THERR ERROR RETURN JMP GOLOG SPC 2 * * CREATE & INITIALIZE DISC FILE FOR LOGGING * DISC1 LDA SIZE GET # OF REQUESTS/REPLIES SZA DID USER SPECIFY? JMP DISC2 YES--BRANCH OUT LDA =D300 IF DEFAULTED, SAVE 300 BUFFERS DISC2 CLB SET UP REGISTERS TO DETERMINE # OF BLOCKS INA ADD 1 TO # BUFFERS FOR HEADER RECORD MPY PKLEN AND MULTIPLY BY BUFFER LENGTH DIV D128 DIVIDE BY BLOCK LENGTH SZB IF B IS NOT ZERO INA ADD ONE TO NUMBER OF BLOCKS STA BLOKS SAVE # OF BLOCKS FOR CREAT CALL * CLB LDA DATAF SZA,RSS DATA FLAG SET? INB NO, REGULAR TYPE 2 FILE INB YES, TYPE 1 FILE FOR FAST XFER STB FTYPE DISC3 JSB CREAT CREATE THE FILE DEF *+1+7 RETURN POINT DEF IDCB DCB FOR FILE (144 WORDS) DEF IERR STATUS/ERROR WORD (ON SUCCESS = # OF 64W BLOCKS IN FILE) DEF NAME FILE NAME DEF ISIZE BLOCK AND RECORDS SIZES DEF FTYPE DEF SEC WRITE PROTECT SECURITY CODE DEF CRN CARTRIDGE SSA,RSS ANY ERRORS RETURNED? JMP DISC4 NO--BRANCH AROUND CPA M2 YES--DUPLICATE FILE? RSS JMP DOERR NO--INFORM USER OF ERROR AND TERMINATE * * HERE IF PLOG INITIATED FOR FILE LOG & DISC FILE ALREADY EXISTS * LDA .ASK ASK USER IF OLD FILE SHOULD BE PURGED LDB D23 AND ITS LENGTH JSB PRINT PRINT MESSAGE JMP TERM2 ERROR RETURN LDA INLU IOR =B400 SET ECHO MODE STA INLU JSB EXEC GET ANSWER DEF *+1+4 DEF NA1 DEF INLU DEF YE/NO YES/NO BUFFER DEF D1 JMP TERM2 ERROR RETURN LDA YE/NO CMA,INA ADA =AYE O.K. TO PURGE? SZA JMP TERM2 NO, TERMINATE PLOG * JSB OPEN OPEN OLD FILE TO PURGE IT DEF *+1+6 RETURN POINT DEF IDCB TEMPORARY DCB FOR THIS FILE DEF IERR STATUS/ERROR WORD DEF NAME FILE NAME DEF D0 NO UNUSUAL OPTIONS DEF SEC SECURITY CODE DEF CRN CARTRIDGE SSA IF AN ERROR--TELL USER & TERMINATE JMP DOERR * JSB PURGE PURGE OLD FILE DEF *+1+5 RETURN POINT DEF IDCB TEMPORARY DCB FOR THIS FILE DEF IERR STATUS/ERROR WORD DEF NAME FILE NAME DEF SEC SECURITY CODE DEF CRN CARTRIDGE SSA JMP DOERR JMP DISC3 * DISC4 ARS STA #SIZE,I SET # OF 128W BLOCKS CLA STA CNTR SET FIRST WORD IN PKLIN TO 0 INA STA #CRNT,I SET CURRENT RECORD NUMBER TO ONE JSB WRITF AND WRITE FIRST RECORD, 1ST WORD =0 DEF *+1+5 RETURN POINT DEF IDCB DEF IERR ERROR STATUS WORD--PLACE HOLDER DEF PKLIN RECORD ADDRESS DEF PKLEN RECORD LENGTH DEF #PLOG+5 #CRNT, THE CURRENT RECORD # IN RES SSA ANY ERRORS RETURNED? JMP DHERR YES--INFORM USER & TERMINATE ISZ #CRNT,I NO--BUMP RECORD ADDRESS JSB OPEN OPEN FILE FOR NON-EXCLUSIZE USE DEF *+1+6 THIS WILL ALSO POST FILE DEF IDCB DCB FOR FILE DEF IERR STATUS/ERROR WORD DEF NAME FILE NAME DEF D3 SHARED, UPDATE OPTIONS DEF SEC SECURITY CODE DEF CRN CARTRIDGE SSA ANY ERRORS RETURNED? JMP DHERR YES--INFORM USER & TERMINATE SPC 2 * * READY TO START LOGGING * GOLOG LDA CLNUM GET CLASS # STA #CLAS,I TELL THE DS WE ARE READY (SET #PLOG'S CLASS) JSB IFBRK CLEAR BREAK FLAG DEF *+1 LDA .STAR LDB =D7 JSB PRINT PRINT START MESSAGE JMP TERM1 SPC 2 * * GET LOGGED DATA * GETNX JSB #GETR DEF *+6 DEF CLNUM DEF RQARE DEF RQMAX DEF DAARE DEF DAMAX JMP GTERR ADA C#LSZ ADD THE APPANDAGE LEN STA CNTR SAVE AS REQUEST LENGTH LDA 1 LOAD RETURNED DATA LENGTH CMB,INB ADB DAMAX MAX LENGTH - RETURNED LEN SSB LDA DAMAX RETURNED LEN > MAX LEN, USE MAX LEN STA DLEN SAVE DATA LENGTH * LDA CLNUM ALR,RAR CLEAR 'SAVE BUFFER' BIT STA CLNUM JSB EXEC DUMMBY GET TO RELEASE SAM BUFFER DEF *+5 DEF NA21 DEF CLNUM DEF D0 DEF D0 JMP GTERR * LDA CNTR SZA,RSS ZERO LENGTH REQUEST? JMP TERM1 YES--TIME TO QUIT DLD $TIME DST BTIME PUT SYSTEM TIME INTO OUTPUT BUFFER JSB WRTRQ WRITE BUFFER TO LOG DEVICE SPC 2 * * CHECK END OF LOG REQUEST * JSB IFBRK SEE IF USER WANTS TO TERMINATE DEF *+1 SZA,RSS JMP GETNX IF NOT, JUST CONTINUE SPC 2 * * HERE ON BR,PLOG * CLA SHUT OFF PLOG TO DS/1000 STA #CLAS,I JSB EXEC SEND A ZERO LENGTH BUFFER DEF *+1+7 TO SIGNIFY END OF LOG DEF NA18 WRITE W/NO ABORT DEF D0 NO DATA DEF D0 DEF D0 DEF D0 DEF D0 ZERO LENGTH REQUEST PARAMETER DEF CLNUM CLASS WORD JMP ZWERR ERROR RETURN CCE LDA CLNUM GET CLASS # RAL,ERA SET NO WAIT BIT STA CLNUM JMP GETNX AND CONTINUE CLEAN UP SPC 2 * * PROGRAM TERMINATION: * THE SEQUENCE OF TERMINATION IS VERY IMPORTANT SINCE AT * DIFFERENT POINT OF THE PROGRAM, DIFFERENT RESOURCES NEED * TO BE RELEASED. * * RESOURCES ARE ALLOCATED IN THIS ORDER: * A. CLASS NUMBER * B. RESOURCE NUMBER * C. LOG DEVICE/FILE * THEREFORE THEY ARE DEALLOCATED/RELEASED IN THIS ORDER: * A. LOG DEVICE/FILE * B. RESOURCE NUMBER * C. CLASS NUMBER * * * (A) RELEASE LOG DEVICE/FILE * TERM1 LDA #TYPE,I LOAD TYPE OF LOG DEVICE SSA DISC LOG? JMP DTERM DISC, BRANCH AROUND WEOF CALL JSB WEOF WITH BREAK DURING TAPE LOG, WRITE EOF & JMP TERM2 GO ON * DTERM LDA #TYPE,I DISC, SET UP FIRST RECORD FOR FILE STA CNTR LDA #CRNT,I CONTAINS: #TYPE, #CRNT, #SIZE, AND #RECS LDB #SIZE,I DST BTIME LDA #RECS,I STA RQARE CLA,INA SET CURRENT RECORD # TO 1 STA #CRNT,I JSB WRTRQ AND WRITE OUT FIRST RECORD JSB CLOSE THEN CLOSE FILE DEF *+1+1 DEF IDCB IGNORE ANY ERRORS SSA JMP DCERR * * * (B) RELEASE RESOURCE # * TERM2 LDA #PRN,I RESOURCE NUMBER ALLOCATED? SZA,RSS JMP TERM3 NO--BRANCH TERM3 JSB RNRQ YES--RELEASE IT DEF *+1+3 RETURN ADDRESS DEF RN32 CLEAR RN, NO ABORT DEF #PLOG+1 RN IN RES DEF STAT STATUS WORD--UNUSED JMP RRERR CLA STA #PRN,I ERASE VALUE IN RES SPC 2 * * (C) RELEASE CLASS # * TERM3 LDA CLNUM GET CLASS WORD SZA,RSS CLASS NUMBER ALLOCATED? JMP DONE NO--BRANCH AROUND DEALLOCATION. CLA STA #CLAS,I SHUT OFF PLOG TO DS/1000 * * FLUSH BUFFERS AND DEALLOCATE CLASS # * JSB CLRQ DEF *+3 DEF FUNC2 DEF CLNUM JMP RCERR * * DONE -- PLOG TERMINATES * DONE LDA .ENDM PRINT "END PLOG" MESSAGE LDB D6 JSB PRINT NOP * JSB EXEC THEN TERMINATE DEF *+1+3 RETURN ADDRESS DEF D6 REQUEST CODE = TERMINATE DEF D0 THIS PROGRAM, DEF D0 NORMALLY SKP HED PLOG--WRTRQ ROUTINE * * ROUTINE TO WRITE OUT BLOCK AND DO FILE AND TAPE MANAGEMENT * WRTRQ NOP JSB RNRQ LOCK RN DEF *+1+3 RETURN ADDRESS DEF RN1 1 = LOCAL LOCK, W/ WAIT, NO ABORT DEF #PLOG+1 RESOURCE NUMBER DEF STAT PLACE HOLDER--UNUSED JMP LKERR ERROR RETURN LDA #TYPE,I IF DISC LOG, SSA BRANCH TO WRITF CALL JMP WRTDS * * TAPE WRITE * LDA OUTLU BEFORE WRITE, IOR =B600 GET DYNAMIC STATUS STA TEMP JSB EXEC DEF *+3 DEF NA3 DEF TEMP CONWD NOP IGNORE ERROR FOR NOW STA TEMP STORE STATUS SO WE CAN CHECK LATER * JSB EXEC IF TAPE, WRITE OUT BLOCK OF INFO DEF *+1+4 RETURN ADDRESS DEF NA2 2 = WRITE, NO ABORT DEF OUTBI LOGGING LU # DEF PKLIN OUTPUT BLOCK ADDRESS DEF #RECS,I OUTPUT LENGTH RSS ERROR, SKIP NEXT JUMP JMP UNLK DST EXCER STORE ERROR CODE CCA SET ERROR FLAG STA TEMP * UNLK EQU * JSB RNRQ UNLOCK RN DEF *+1+3 RETURN ADDRESS DEF RN4 4 = CLEAR LOCK, NO ABORT DEF #PLOG+1 RESOURCE NUMBER DEF STAT PLACE HOLDER--UNUSED JMP LKERR ERROR RETURN LDA TEMP GET FLAG WORD SSA ANY ERRORS? JMP TWERR YES--INFORM USER AND B40 EOT CONDITION? SZA,RSS JMP WRTRQ,I NO--RETURN * JSB REWND REWIND TAPE LDA .EOT LDB D18 INFORM USER JSB PRINT NOP JMP TERM2 FLUSH SYSTEM--THEN TERMINATE SPC 2 * * HERE IF FILE IS DISC MEDIUM * WRTDS JSB WRITF WRITE RECORD TO FILE DEF *+1+5 RETURN ADDRESS DEF IDCB DCB FOR FILE DEF IERR STATUS/ERROR WORD DEF PKLIN OUTPUT BLOCK ADDRESS DEF #RECS,I OUTPUT LENGTH DEF #PLOG+5 RECORD NUMBER (IN RES) * SSA,RSS STATUS POSITIVE? JMP WRTD2 YES--BRANCH TO RECORD BUMP CPA M12 NO--EOF ENCOUNTERED? RSS JMP DWERR NO--INFORM USER OF ERROR * LDA B2000 YES--SET FULL BUFFER BIT IN #TYPE IOR #TYPE,I STA #TYPE,I LDA D2 CURRENT RECORD # = RECORD # 2 STA #CRNT,I JMP WRTDS TRY WRITING RECORD AGAIN * WRTD2 JSB POST POST THE FILE TO MAKE SURE DEF *+1+1 THE RECORD GETS OUT TO THE DISC DEF IDCB SSA IF ANY ERRORS ON POST, JMP DWERR INFORM USER & TERMINATE * ISZ #CRNT,I RECORD WRITTEN, INCREMENT RECORD NUMBER JSB RNRQ UNLOCK RN DEF *+1+3 RETURN ADDRESS DEF RN4 4 = CLEAR LOCK, NO ABORT DEF #PLOG+1 RESOURCE NUMBER ADDR. IN RES DEF STAT PLACE HOLDER--UNUSED JMP LKERR ERROR RETURN JMP WRTRQ,I AND NORMAL RETURN SKP HED PLOG--UTILITY ROUTINES * * ROUTINE TO ADD AN EOF TO MAG TAPE LOG * WEOF NOP LDA OUTLU SET CONTROL BIT IN LU WORD FOR WRITE IOR B100 STA CNTRL JSB EXEC DEF *+1+2 RETURN ADDRESS DEF NA3 CONTROL WRITE-END-OF FILE DEF CNTRL W/ NO ABORT NOP (IGNORE ANY ERRORS) JSB REWND REWIND TAPE BITS FOR REWIND JMP WEOF,I AND RETURN * REWND NOP ROUTINE TO REWIND MAG TAPE LDA OUTLU SET CONTROL BITS IN LU FOR REWIND IOR B400 STA CNTRL JSB EXEC DEF *+1+2 DEF NA3 CONTROL (W/ NO ABORT) DEF CNTRL REWIND NOP ERRORS IGNORED JMP REWND,I SPC 2 * * ROUTINE TO WRITE TO THE OPERATOR'S CONSOLE * PRINT NOP STA .MSG PUT BUFFER ADDRESS STB .MSGL AND BUFFER LENGTH INTO CALL JSB EXEC WRITE TO CONSOLE LU DEF *+1+4 RETURN ADDRESS DEF NA2 2 = WRITE, NO ABORT DEF INLU CONSOLE LU .MSG NOP DEF .MSGL JMP PRINT,I ERROR RETURN ISZ PRINT BUMP TO NORMAL RETURN ADDRESS JMP PRINT,I .MSGL NOP SPC 2 * * ROUTINE TO TERMINATE CLONES OF PLOG * CLONE NOP JSB PNAME GET ACTUAL NAME OF PROGRAM DEF *+2 DEF PNAM PROGRAM NAME ARRAY LDA "PLOG+2 LAST 2 CHARS = " "? CPA PNAM+2 RSS JMP PLERR NOPE LDA "PLOG+1 YES, NEXT CHARS = "OG"? CPA PNAM+1 RSS JMP PLERR NOPE LDA "PLOG YES, NEXT CHARS = "PL"? CPA PNAM RSS JMP PLERR NOPE JMP CLONE,I THIS REALLY IS PLOG, SO RETURN SPC 2 * * ROUTINES TO HANDLE ERROR CONDITIONS * PLERR LDA PNAM NO CLONES ALLOWED! STA PLER+2 NAME OF PROGRAM MUST BE PLOG DLD PNAM+1 INSERT BAD NAME DST PLER+3 LDA .PLER LDB D25 JSB PRINT NOP JMP DONE CUERR LDA .CUER CLASS CLEANUP ERROR LDB D23 JSB PRINT NOP JMP DONE RNALL LDA .RNER GET UNALLOCATED RN MESSAGE LDB D19 AND ITS LENGTH JSB PRINT NOP JMP TERM3 CLALL LDA .CLER GET UNALLOCATED CLASS # LDB D22 MESSAGE AND ITS LENGTH JSB PRINT NOP JMP DONE INERR LDA .INER LDB D20 JSB PRINT NOP JMP DONE LUERR LDA .LUER GET ILLEGAL LOG LU MESSAGE LDB D19 AND ITS LENGTH JSB PRINT NOP JMP DONE SZERR LDA .SZER LDB D22 JSB PRINT NOP JMP DONE THERR DST EXCER+2 SAVE A & B REGS.--ERROR CODE LDA .EXER GET ADDRESS OF ERROR CODE LDB D20 AND ITS LENGTH JSB PRINT NOP JMP TERM2 TWERR LDA .EXER LDB D20 JSB PRINT NOP JMP TERM1 ZWERR DST EXCER+2 LDA .EXER LDB D20 JSB PRINT NOP JMP TERM1 GTERR DST EXCER+2 LDA .EXER LDB D20 JSB PRINT NOP JMP TERM1 LKERR LDA .LKER LDB D20 JSB PRINT NOP JMP TERM1 RRERR LDA .RRER LDB D20 JSB PRINT NOP JMP TERM3 RCERR DST EXCER+2 LDA .EXER LDB D20 JSB PRINT NOP JMP DONE DHERR JSB FIERR JMP TERM1 DOERR JSB FIERR JMP TERM2 DWERR JSB FIERR JMP TERM2 DCERR JSB FIERR JMP TERM2 FIERR NOP CMA,INA SET ERROR CODE POSITIVE STA TEMP JSB KCVT AND CONVERT CODE TO ASCII DEF *+1+1 DEF TEMP STA FILER+8 PUT CODE INTO ERROR MESSAGE LDA .FIER GET ADDRESS OF ERROR MESSAGE LDB D19 AND ITS LENGTH JSB PRINT NOP JMP FIERR,I SPC 2 * * ERROR AND ALLOCATION PROBLEM MESSAGES * PLER ASC 25, ** IS ILLEGAL NAME--PROGRAM MUST BE PLOG .PLER DEF PLER CUER ASC 23, ** ERROR-- RUN PLOG,-1 TO CLEAN UP RESOURCES .CUER DEF CUER EOTMS ASC 18, ** END OF TAPE -- PLOG TERMINATING .EOT DEF EOTMS CLER ASC 22, ** CLASS # UNAVAILABLE -- PLOG TERMINATING .CLER DEF CLER RNER ASC 19, ** RN UNAVAILABLE -- PLOG TERMINATING .RNER DEF RNER LKER ASC 20, ** RN LOCKING ERROR -- PLOG TERMINATING .LKER DEF LKER RRER ASC 20, ** CANNOT RELEASE RN -- PLOG TERMINATING .RRER DEF RRER RCER ASC 23, ** CANNOT RELEASE CLASS # -- PLOG TERMINATING .RCER DEF RCER EXCER ASC 20, ** EXEC ERROR -- PLOG TERMINATING .EXER DEF EXCER LUER ASC 19, ** ILLEGAL LOG LU -- PLOG TERMINATING .LUER DEF LUER INER ASC 20, ** ILLEGAL INPUT LU -- PLOG TERMINATING .INER DEF INER SZER ASC 22, ** ILLEGAL BUFFER SIZE -- PLOG TERMINATING .SZER DEF SZER ASK ASC 23, ** DUPLICATE FILE -- PURGE OLD FILE? (YE/NO) .ASK DEF ASK FILER ASC 19, ** FMP ERROR - -- PLOG TERMINATING .FIER DEF FILER ENDM ASC 6, ** END PLOG .ENDM DEF ENDM STAR ASC 7, ** START PLOG .STAR DEF STAR SPC 2 * * CONSTANTS AND WORK AREAS * D0 DEC 0 DECIMAL CONSTANTS D1 DEC 1 D2 DEC 2 D3 DEC 3 D6 DEC 6 D18 DEC 18 D19 DEC 19 D20 DEC 20 D23 DEC 23 D22 DEC 22 D25 DEC 25 D27 DEC 27 D29 DEC 29 D64 DEC 64 D128 DEC 128 M2 DEC -2 M12 DEC -12 B40 OCT 40 B100 EQU D64 B400 OCT 000400 B2000 OCT 002000 NA1 OCT 100001 EXEC CALL REQUESTS WITH NA2 OCT 100002 NO ABORT BITS SET NA3 OCT 100003 NA18 OCT 100022 NA21 OCT 100025 RN1 OCT 040001 RN4 OCT 040004 RN32 OCT 040040 ALLOC OCT 140020 NDEAL OCT 020000 MASKS FOR SETTING DO NOT DEALLOCATE BIT FUNC1 OCT 140001 NO WAIT, NO ABORT, GET CLASS # FUNC2 OCT 140002 NO WAIT, NO ABORT, DEALLOCATE CLASS # & BUFFERS PNAM BSS 3 STORAGE FOR CURRENT PROGRAM NAME "PLOG ASC 3,PLOG ONLY ALLOWABLE PROGRAM NAME CFLG BSS 1 PLOG CLEAN UP FLAG (-1 => DOING CLEANUP) * * THIS AREA IS USED BY #PKUP AND SHOULD ALWAYS BE IN THIS ORDER * PMASK BYT 5,2 FIVE PARAMETERS, 2ND IS IN NAMR FORMAT INLU BSS 1 CONSOLE LU NAME BSS 10 LOG FILE NAME PTYPE EQU NAME+3 PARAMETER TYPE FROM NAMR SEC EQU NAME+4 LOG SECURITY CRN EQU NAME+5 LOG CRN DATAF BSS 1 DATA FLAG SIZE BSS 1 # OF BUFFERS DEBUG BSS 1 DEBUG FLAG * DEFLU NOP DEFAULT LU OUTLU EQU NAME LOG LU OUTBI NOP LOG LU WITH BINARY WRITE BIT SET PLNAM ASC 3,'PLOG DEFAULT FILE NAME PLSEC ASC 1,DS DEFAULT SECURITY CODE PLCRN DEC 0 DEFAULT CARTRIDGE STAT NOP STATUS WORD FOR EXEC CALLS TEMP NOP TEMPORARY STORAGE AREA IERR NOP CLNUM NOP CLASS WORD CNTRL NOP I/O CONTROL WORD RQMAX ABS #MXR+#LSZ HEADER MAX DAMAX ABS 128-#MXR-#LSZ-4 DATA MAX C#LSZ ABS #LSZ YE/NO NOP FTYPE NOP * ISIZE BSS 2 BLOKS EQU ISIZE # OF DISC BLOCKS PKLEN EQU ISIZE+1 RECORD SIZE * PKLIN BSS 128 CNTR EQU PKLIN BTIME EQU PKLIN+1 RQARE EQU PKLIN+3 DLEN EQU PKLIN+3+#MXR+#LSZ DAARE EQU PKLIN+4+#MXR+#LSZ IDCB BSS 144 BSS 0 END PLOG