|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 10228 (0x27f4)
Notes: pts_type(SC)
Names: »UDM.SC«
└─⟦cd4bbebb4⟧ Bits:30009680 Philips computer tape "600221"
└─⟦this⟧ »ATM6601/UDM.SC«
└─⟦this⟧ »BEBATM/UDM.SC«
IDENT UDM 830330 NIJO * ************************************************************************ * * THE FUNCTION OF THESE ROUTINES IS TO PROVIDE AN * INTERFACE BETWEEN THE UTILITY PACKAGE AND THE * FILE MANAGEMENT INTERFACE. * ************************************************************************ * * THE CALLS TO THESE ROUTINES HAVE THE FOLLOWING FORMATS :- * * PERF OPEN,<FILIND>,<STATUS> * PERF CLOSE,<FILIND> * PERF READ,<FILIND>,<BUF>,<RECNO>,<STATUS> * PERF WRITDK <FILIND>,<BUF>,<RECNO>,<STATUS> * * * WHERE: * * <FILIND> IS A BINARY DATA ITEM WHICH IS USED * AS A POINTER TO AN ENTRY IN THE * TABLE 'DSFTABLE'. THIS TABLE CONTAINS * THE FILE NAME, THE VOLUME NAME, THE * FILE NUMBER ASSIGNED WHEN THE FILE * OPENED AND THE FILE RECORD LENGTH. * * <STATUS> IS A BINARY DATA ITEM WHICH WILL * CONTAIN THE RETURN CODE AFTER THE * REQUEST. * * <BUF> IS A STRING DATA ITEM CONTAINING THE * DATA TO BE READ/WRITEN FROM/TO THE FILE. * * <RECNO> IS A BINARY DATA ITEM CONTAINING THE * FILE RECORD NUMBER TO BE ACCESSED. * * * THE CREDIT CONDITION REGISTER WILL BE SET TO ZERO IF THE * REQUEST WAS SUCCESSFUL AND TWO IF NOT. * THE CREDIT CONDITION REGISTER WILL BE SET TO ONE IF A * DELETED RECORD IS READ. * ************************************************************************ * EJECT DDUM DDIV PDIV * * *** ENTRY POINTS * ENTRY OPEN ENTRY CLOSE ENTRY READ * *** EXTERNAL REFERENCES * EXT FMOPEN EXT FMCLOS EXT FMREAD EXT FMRFPB EXT COPY4 * EJECT * OPEN PROC FILIND,ST PBIN FILIND,ST ************************************************************************ * * THIS ROUTINE OPENS A DISK FILE FOR ACCESS BY ANY TASK * THE FILE NAME AND VOLUME NAME ARE EXTRACTED FROM THE * TABLE 'DSFTABLE' TO FORM A FILE PARAMETER BLOCK. THE * FILE MANAGEMENT ROUTINES ASSIGN A FILE NUMBER TO THE * FILE AND THIS IS STORED IN THE TABLE 'DSFTABLE' ON * SUCCESSFUL COMPLETION OF THE OPEN * ************************************************************************ * COPY FILE,COB0,COB8,DSFTABLE(FILIND),COB0 :GET FILE NAME COPY VOLUME,COB0,COB6,DSFTABLE(FILIND),COB8 :GET VOLUME NAME MOVE DKSTAT,=C' ' EDIT FMBUF,FMTFPB SET UP FILE PARAMETER BLOCK CALL FMOPEN,WKBIN1,FMBUF,ST :OPEN FILE BNOK OPENERR OPEN SUCCESSFUL ? CALL COPY4,WKBIN2,COB0,COB1,WKBIN1,COB3 COPY FILE NO. CALL FMRFPB,WKBIN1,FMBUF,ST BNOK OPENERR CALL COPY4,WKBIN2,COB1,COB3,FMBUF,COB1 XCOPY DSFTABLE(FILIND),COB14,COB2,WKBIN2,COB0 RECOPY IT CMP COB0,COB0 SET CR = 0 RET RETURN TO APPLICATION OPENERR CMP COB0,COB1 SET CR = 2 RET RETURN TO APPLICATION PEND EJECT CLOSE PROC FILIND PBIN FILIND * ************************************************************************ * * THIS ROUTINE CLOSES A FILE. * PARAMETERS AS FOR OPEN. * ************************************************************************ * COPY FILE,COB0,COB8,DSFTABLE(FILIND),COB0 :GET FILE NAME COPY VOLUME,COB0,COB6,DSFTABLE(FILIND),COB8 :GET VOLUME NAME MOVE DKSTAT,=C' ' MOVE WKBIN1,COB0 ZERO WKBIN1 MOVE BIN7,=W'28' CALL COPY4,WKBIN1,COB3,COB1,DSFTABLE(FILIND),BIN7 EDIT FMBUF,FMTFPB SET UP FILE PARAMETER BLOCK CALL FMCLOS,WKBIN1,FMBUF,WKBIN2 CLOSE FILE XCOPY WKBIN1,COB0,COB2,DSFTABLE(FILIND),COB14 CALL COPY4,WKBIN1,COB0,COB1,COB0,COB3 XCOPY DSFTABLE(FILIND),COB14,COB2,WKBIN1,COB0 MOVE WKBIN1,COB0 LOOP ADD WKBIN1,COB1 CBG WKBIN1,NOFILS,END COPY WKSTR6,COB0,COB6,DSFTABLE(WKBIN1),COB8 GET VOLUME NAME CBNE WKSTR6,VOLUME,LOOP THIS VOLUME ? XCOPY WKBIN2,COB0,COB2,DSFTABLE(WKBIN1),COB14 YES MOVE WKB1,COB0 CALL COPY4,WKB1,COB3,COB1,WKBIN2,COB0 GET FILE NUMBER CBNE WKB1,COB0,LOOP FILE STILL OPEN END RET RETURN PEND EJECT * READ PROC FILIND,BUF,REC.NO,ST PBIN FILIND,REC.NO,ST PSTRG BUF * ************************************************************************ * * THIS ROUTINE READS A RECORD FROM A DISK FILE * ************************************************************************ * PERF GETBLK,FILIND,REC.NO,ST GET DISK SECTOR B RDERR MOVE BUF,=C' ' MOVE WKBIN1,RECLEN SET UP RECORD LENGTH COPY BUF,COB0,WKBIN1,FMBUF,WKBIN2 COPY DATA ADD WKBIN2,WKBIN1 MOVE DKSTAT,=X'00' COPY DKSTAT,COB0,COB1,FMBUF,WKBIN2 GET RECORD STATUS CODE CBNE DKSTAT,=X'00000000',NOTMT EMPTY RECORD? MOVE BUF,=C' ' YES CMP COB1,COB0 SET CR = 1 RET RETURN TO APPLICATION NOTMT CMP COB0,COB0 SET CR = 0 RET RETURN TO APPLICATION RDERR CMP COB0,COB1 SET CR = 2 RET RETURN TO APPLICATION PEND EJECT * GETBLK PROC FILIND,REC.NO,ST PBIN FILIND,REC.NO,ST * ************************************************************************ * * THIS ROUTINE READS THE SECTOR CONTAINING THE RECORD POINTED * TO BY REC.NO FROM THE FILE POINTED TO BY FILIND. * ************************************************************************ * XCOPY WKBIN1,COB0,COB2,DSFTABLE(FILIND),COB14 MOVE RECLEN,COB0 MOVE FN,COB0 CALL COPY4,RECLEN,COB1,COB3,WKBIN1,COB1 ADD RECLEN,COB1 ALLOW FOR RECORD STATUS BYTE CALL COPY4,FN,COB3,COB1,WKBIN1,COB0 MOVE WKBIN4,=W'256' MOVE WKBIN3,RECLEN DIV WKBIN4,WKBIN3 MOVE WKBIN3,REC.NO SUB WKBIN3,=W'1' COUNT FROM ZERO DIV WKBIN3,WKBIN4 MOVE SECTNO,WKBIN3 ADD SECTNO,COB1 SECTNO = SECTOR TO BE READ MUL WKBIN3,WKBIN4 MOVE WKBIN1,WKBIN3 MOVE WKBIN2,REC.NO SUB WKBIN2,COB1 COUNT FROM ZERO SUB WKBIN2,WKBIN1 WKBIN2 = RECORD NO IN BLOCK MUL WKBIN2,RECLEN MOVE LENGTH,=W'256' SUB RECLEN,COB1 CALL FMREAD,FN,FMBUF,LENGTH,SECTNO,ST BNOK GETERR RET 2 GETERR RET RETURN * PEND * EJECT * ************************************************************************ * * FORMATS * ************************************************************************ * FMTFPB FRMT FXCOPY DKSTAT FXCOPY =X'00000000' FCOPY FILE FXCOPY =X'0000' FCOPY VOLUME FXCOPY =X'00000000' FILLR ' ',30 FXCOPY =X'00000000000000' FXCOPY =X'0000000000' FILLR ' ',9 FXCOPY =X'00' FMEND * END