ASMB NAM DBCRT,7 92069-16169 REV.1912 790315 * * ****************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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. ******************************************************************* * * * SOURCE: 92069-18169 * RELOC: 92069-16169 * * * CALLING SEQUENCE: * CALL DBCRT(IROOT,IDCB,IMODE,ISTAT) * * WHERE: * * IROOT * IS THE ADDRESS OF THE ROOT FILE * * IDCB * IS A FMP FILE CONTROL BLOCK * * IMODE * IS THE PURGE MODE INDICATOR * 0 IMPLIES "NO PURGE" OF DATA SET FILES * 1 IMPLIES "PURGE" THE DATA SET FILES * * ISTAT * IS AN ARRAY OF AT LEAST FOUR WORDS IN WHICH A STATUS CODE, ZERO * IF SUCCESSFUL, IS RETURNED IN THE FIRST ELEMENT. IF UNSUCCESS- * FUL, THE NAME OF THE DATA SET ON WHICH THE ERROR IS ENCOUNTERED * IS RETURNED IN THE SECOND THROUGH FOURTH ELEMENTS. * ENT DBCRT * EXT PURGE,.ENTR,.MVW,ECREA,ECLOS,EWRIT EXT SIZE EXT .DMP,.DDI,.DIN,.DDS,.DIS * * * SKP * * * * * * IROOT BSS 1 ADDRESS OF ROOT FILE IDCB BSS 1 FMP FILE CONTROL BLOCK IMODE BSS 1 PURGE MODE FLAG * 0 IMPLIES "NO PURGE" * 1 IMPLIES "PURGE" ISTAT BSS 1 STATUS ARRAY * DBCRT NOP JSB .ENTR GET PARMETERS DEF IROOT * LDA IROOT,I SAVE THE SECURITY CODE ADA DBSCD STA ISC * ADA DBSCT SAVE SET TABLE COUNT LDB A,I CMB,INB STB SCNT * INA SAVE SET TABLE POINTER LDB A,I ADB IROOT,I STB DSET * ADA .2 SAVE FREE RECORD TABLE POINTER. LDB A,I ADB IROOT,I STB FRTPT * * * INITIALIZE INFORMATION NEEDED FOR FMP CALLS * * DBC10 LDB DSET GET CARTRIDGE NUMBER ADB DSCRN STB ICR * INB GET RECORD LENGTH LDA B,I RECORD LENGTH = AND B377 MEDIA LENGTH + INB DATA LENGTH ADA B,I * STA RLGT2 SAVE RECORD LENGTH AS A DOUBLE WORD STA ISIZ4 SAVE THE RECORD SIZE FOR ECREA * ADB DSCAP GET SIZE OF FILE IN SECTORS. DLD B,I DST FLGTH SAVE NUMBER OF RECORDS IN FILE * JSB SIZE DEF *+4 DEF FLGTH DEF RLGT2 DEF ISTAT,I * SOC CHECK FOR OVERFLOW JMP ERR30 * JSB .DIN SOC CHECK FOR OVERFLOW JMP ERR30 * SLB CHECK FOR EVEN BLOCK COUNT JSB .DIN * SOC CHECK FOR OVERFLOW JMP ERR30 * DST ISIZE SAVE THE BLOCK SIZE * * * * * * ZERO BUFFER * * * LDB RLGT2 SET CNT TO # WORDS IN RECORD CMB,INB STB CNT * LDB ABUFF GET ADDRESS TO BUFFER CLA DBC20 STA B,I ZERO BUFFER INB ISZ CNT JMP DBC20 * * * SET FLAG TO INDICATE DATA SET TYPE * * CLB LDA DSET GET THE DATA SET TYPE ADA DSINF LDA A,I ALF SIGN BIT SET AFTER ROTATE SSA IF DATA SET A DETAIL. CCB IF DETAIL SET FLAG = -1 STB FLAG * * * * * DELETE FILE WHEN NECESSARY * * * LDA IMODE,I SZA,RSS JMP DBC30 * JSB PURGE DEF *+6 DEF IDCB,I DEF ISTAT,I DEF DSET,I ISC ABS *-* ICR ABS *-* * CPA M6 JMP DBC30 SSA JMP ERRX * * * CREATE THE FILE * * DBC30 JSB ECREA DEF *+8 DEF IDCB,I DEF ISTAT,I DEF DSET,I DEF ISIZE DEF .2 DEF ISC,I DEF ICR,I * SSA JMP ERRX * CLA CLB,INB DST NUM * * * REINITIALIZE THE FREE SPACE POINTERS FOR THIS DATA SET. * * DLD FLGTH FIRST DOUBLEWORD = DST FRTPT,I # OF FREE RECORDS = ISZ FRTPT CAPACITY OF DATA SET. ISZ FRTPT * CLB SECOND DOUBLEWORD = LDA FLAG ZERO IF A MASTER SET SSA ELSE ONE. INB CLA DST FRTPT,I ISZ FRTPT ISZ FRTPT SKP * * * * * * INITIALIZE THE DATA SET RECORDS TO ZERO * CHAIN THE FREE SPACE POINTERS IN THE DETAIL * DATA SETS * * * * DBC40 LDA FLAG SSA,RSS IF MASTER DON'T MODIFY MEDIA JMP DBC50 * DLD NUM OTHERWISE POINT TO NEXT RECORD JSB .DIN DST ABUF2 * DBC50 JSB WRITE SSA JMP ERRX * JSB .DIS DOUBLE INCREMENT RECORD COUNT DEF NUM NOP * JSB .DDS DOUBLE DECREMENT AND SKIP DEF FLGTH JMP DBC40 * CLA PUT A ZERO IN THE MEDIA RECORD OF LAST CHAIN CLB DST ABUF2 * JSB .DDS DEF NUM NOP * JSB WRITE SSA JMP ERRX * JSB ECLOS CLOSE THE DATA FILE DEF *+3 DEF IDCB,I DEF ISTAT,I * SSA JMP ERRX * LDA DSET GET NEXT DATA SET TABLE ENTRY ADA DSLNG STA DSET * ISZ SCNT ARE THERE MORE DATA SETS? JMP DBC10 YES, GO PROCESS THEM CLA NO, EXIT WITH NO ERROR STA ISTAT,I EXIT JMP DBCRT,I * * * ERR30 LDA .N30 SET ERROR CODE TO -30 STA ISTAT,I * ERRX LDA DSET ERROR, PUT DATA SET NAME LDB ISTAT IN STATUS ARRAY. INB JSB .MVW DEF .3 DEC 0 JMP EXIT RETURN * * .N30 DEC -30 SKP * * * * WRITE FILE ROUTINE * * * * WRITE NOP JSB EWRIT DEF *+6 DEF IDCB,I DEF ISTAT,I DEF BUFF DEF .0 DEF NUM JMP WRITE,I SKP * * * * * DATA DECLARATION * * * * * * A EQU 0 B EQU 1 * * DBSCD DEC 3 OFFSET INTO ROOT FILE FOR DATA BASE SECURITY CODE DBSCT DEC 6 + 3 = ROOT FILE OFFSET FOR DB SET COUNT * * DSCRN EQU DBSCD DATA SET OFFSET FOR DATA SET CARTRIDGE DSINF DEC 4 DATA SET OFFSET FOR TYPE AND MEDIA DSCAP EQU DBSCD + 5 = DATA SET OFFSET FOR CAPACITY DSLNG DEC 17 LENGTH OF SET TABLE ENTRY * * B377 OCT 377 MASK FOR RIGHT BYTE .128D DEC 0 DOUBLE WORD 128 DEC 128 .0 EQU .128D M6 DEC -6 .2 DEC 2 .3 EQU DBSCD * * * * SCNT BSS 1 NEGETIVE SET COUNT DSET BSS 1 ADDRESS OF CURRENT SET FRTPT BSS 1 ADDRESS OF FREE RECORD TABLE CNT BSS 1 FLAG BSS 1 FLAG TO INDICATE SET TYPE NUM BSS 2 HOLDS CURRENT RECORD NUMBER. FLGTH BSS 2 FILE CAPACITY RLGTH DEC 0,0 DOUBLE WORD RECORD LENGTH RLGT2 EQU RLGTH+1 ISIZE DEC 0,0,0,0 ISIZ4 EQU ISIZE+3 * ABUFF DEF BUFF BUFF BSS 2048 ABUF2 EQU BUFF+1 * BSS 0 END