Type ASSEMBLE
Source Lines : 1,944
Fixes Applied : 11
Most Recent Version : Thursday, December 7, 1978
Last Fix ID : [HRC105DK]
Module
DMKIOF
Attributes
SERIALLY REUSEABLE, PAGABLE, ENTERED VIA SVC
Operation
I. HANDLE RECORDING FOR OBR/MDR RECORDS 1. IF THE RECORDING CYLINDER IS FULL, RELEASE THE OBR/MDR RECORD AND SEND THE FULL CYLINDER ERROR MESSAGE (DMKIOF553E/DMKIOF551E) TO THE OPERATOR IF ONE HAS NOT BEEN SENT BEFORE. AFTERWARD, GO CHECK RECORDING QUES FOR OTHER REQUESTS. 2. IF THERE IS ALREADY A RECORDING PAGE IN STORAGE, BYPASS GETTING A VIRTUAL BUFFER PAGE AND RECORDING PAGE. IF RECORDING PAGE IS NOT IN STORAGE, CALL DMKPGTVG TO OBTAIN A VIRTUAL BUFFER PAGE, CALL DMKRPAGT TO READ A PAGE FROM THE RECORDING CYLINDER INTO STORAGE AND CALL DMKPTRAN TO LOCK RECORDING PAGE IN STORAGE. 3. DETERMINE IF ENOUGH SPACE IS AVAILABLE ON THE RECORDING PAGE FOR THE RECORD. IF NOT, GET ANOTHER PAGE FROM RECORDING CYLINDER AND TRY AGAIN. 4. FOR AN OBR RECORD, THE DEVICE TYPE WILL BE ALTERED TO AN OS DEVICE TYPE IN ORDER TO ALLOW DECODING BY CPEREP (A CALL TO DMKIOC) . 5. BUILD OBR/MDR RECORD USING THE ERRBLOK THEN MOVE THE OBR/MDR RECORD INTO AVAILABLE AREA IN THE RECORDING PAGE AND RELEASE THE ERRBLOK.. 6. IF RUNNING IN A VIRTUAL MACHINE, ISSUE AN SVC 76 TO HAVE THE OBR/MDR RECORD ON THE REAL MACHINE RECORDING CYLINDER. IF THIS IS NOT A VIRTUAL MACHINE, UPDATE THE CONTROL HEADER IN THE RECORDING PAGE, TO POINT TO NEXT AVAILABLE AREA ON PAGE. 7. MOVE PAGE NUMBER INTO THE OBR/MDR PAGE FIELD AND RELEASE THE OBR/MDR RECORD. 8. ERASE QUE - IF AN ERASE REQUEST IS ON THE QUE, WRITE OUT LAST RECORDING PAGE TO RECORDING CYLINDER (IF NECESSARY), PUT NEXT REQUEST ON TOP OF QUE AND CALL DMKSTKCP TO STACK A CPEXBLOK TO RETURN TO DMKIOEFM. AFTERWARD, EXIT FROM RECORDER. IF ERASE QUE IS EMPTY, GO CHECK NEXT RECORDING QUE. 9. MACHINE CHECK RECORDING QUE - IF THERE IS A MACHINE CHECK REQUEST ON THE QUE, WRITE OUT LAST RECORDING PAGE (IF NECESSARY), PUT NEXT REQUEST ON TOP OF QUE AND CALL DMKSTKCP TO STACK A CPEXBLOK TO RETURN TO DMKIOEMC. AFTERWARD, EXIT FROM RECORDER. IF MACHINE CHECK QUE IS EMPTY, GO CHECK NEXT RECORDING QUE. 10. CHANNEL CHECK RECORDING QUE - IF THERE IS A CHANNEL CHECK REQUEST ON THE QUE, WRITE OUT LAST RECORDING PAGE TO RECORDING CYLINDER (IF NECESSARY), PUT NEXT REQUEST ON TOP OF QUE, GET POINTERS FOR THE NEXT RECORD, RELEASE THE CPEXBLOK AND GO TO CHANNEL CHECK'S SECTION OF RECORDER. IF CHANNEL CHECK QUE IS EMPTY, GO CHECK NEXT RECORDING QUE. 11. OBR/MDR RECORDING QUE - IF THERE IS A OBR/MDR REQUEST ON THE QUE, PUT THE NEXT REQUEST ON TOP OF QUE, GET POINTERS TO NEXT ERRBLOK, RELEASE THE CPEXBLOK AND GO TO OBR/MDR SECTION OF RECORDER. IF OBR/MDR QUE IS EMPTY, GO CHECK NEXT RECORDING QUE. 12. ENVIRONMENTAL RECORDING QUE - IF THERE AN MDR REQUEST ON THE QUE, PUT THE NEXT REQUEST ON TOP OF QUE AND CALL DMKSTKCP TO STACK CPEXBLOK TO RETURN TO DMKIOESD. AFTERWARD, EXIT FROM THE RECORDER. 13. SVC 76 RECORDING QUE - IF THERE IS AN SVC 76 REQUEST ON THE QUE, PUT THE NEXT REQUEST ON TOP OF QUE, GET POINTERS TO THE NEXT RECORD, RELEASE THE CPEXBLOK AND GO TO SVC 76 SECTION OF RECORDER. IF THE SVC 76 QUE IS EMPTY, GO WRITE RECORDING PAGE BACK TO THE RECORDING CYLINDER BY CALLING DMKRPAPT (IF NECESSARY). AFTERWARD, UNLOCK AND RELEASE RECORDING PAGE AND VIRTUAL BUFFER PAGE. 14. STATISTICAL UPDATE QUE - IF THERE IS A UPDATE REQUEST ON THE QUE, PUT THE NEXT REQUEST ON THE TOP OF THE QUE, GET POINTERS TO NEXT ERRBLOK, RELEASE THE THE CPEXBLOK AND GO TO THE STATISTICAL UPDATE SECTION IF SDR QUEUE IS EMPTY GO CHECK 90% FULL CONDITION. 15. DETERMINE IF THE RECORDING CYLINDER IS 90% FULL. IF 90 % FULL, WRITE AN ERROR MESSAGE TO THE OPERATOR (DMKIOF552E/DMKIOF550E). 16. CLEAR THE MCH/CCH ENTRY FLAG AND THE RECORDING IN PROGRESS FLAG AND RETURN TO CALLER.
Calls to Other Routines
DMKFREE - TO ALLOCATE FREE STORAGE FOR SDRBLOK