ASMB,R,L,C,Q HED CREAT * NAME: CREAT * SOURCE: 92067-18126 * RELOC: 92067-16125 * PGMR: G.A.A.,N.J.S. * * *************************************************************** * * (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. * * *************************************************************** * NAM CREAT,7 92067-16125 REV.2026 800425 ENT CREAT,ECREA EXT CLOSE,$OPEN,.ENTR EXT NAM..,RMPAR EXT EXEC, .DAD EXT D.R,OVRD. SUP * * * CREAT IS THE FILE CREATION MODULE OF THE REAL TIME * FILE MANAGEMENT PACKAGE. * * THE FORTRAN CALLING SEQUENCE IS: * * CALL CREAT(IDCB,IERR,NAME,ISIZE,ITYPE,IS,ILU,IBLK,DUM,DUM,ILNM) OR * CALL ECREA(IDCB,IERR,NAME,ISIZE,ITYPE,IS,ILU,IBLK,JSIZE,DUM,ILNAM) * * OR * * IER = CREAT(IDCB,IERR,NAME,ISIZE,ITYPE,IS,ILU,IBLK,DUM,DUM,ILNAM) * * * NOTE: ILNAM IS NOT DOCUMENTED FOR USERS. IT IS INTENDED TO BE USED ONLY * BY INERNAL SUBSYSTEMS ONLY. DUM IS SIMPLY A DUMMY PARAMETER USED * TO SEPERATE ILNAM FROM THE DOCUMENTED PARAMETERS. * * * * W H E R E: * * IDCB IS THE ADDRESS OF A 144-WORD ARRAY WHICH * CREAT WILL USE AS A SCRATCH AREA. IF * ISIZE<0 THEN THE CREATED FILE IS ALSO * OPENED TO THIS DATA CONTROL BLOCK. * * IERR IS THE ADDRESS TO WHICH THE ERROR CODE * IS RETURNED. THIS INFORMATION IS ALSO * RETURNED IN THE A REGISTER. * * ERROR CODES ARE: * * >0 THE CREAT WAS SUCCESSFUL - THE #SECTORS IS RETURNED * -1 THE DISC IS DOWN * -2 DUPLICATE NAME * -4 FILE TOO LONG * -10 NOT ENOUGH PARAMETERS IN THE CALL * -13 DISC LOCKED * -14 DIRECTORY FULL * -15 ILLEGAL NAME * -16 ILLEGAL TYPE OR SIZE * -19 ILLEGAL ACCESS ON A SYSTEM DISC * -32 CARTRIDGE NOT FOUND * -33 NOT ENOUGH ROOM * * IF CREAT IS SUCCESSFUL, FILE SIZE IN SECTORS IS * RETURNED HERE. HOWEVER, IF ECREA IS SUCCESSFUL, IER * WILL CONTAIN 0. SIZE MAY BE OBTAINED FROM JSIZE. * * * * NAME IS A 3-WORD ARRAY CONTAINING THE NEW FILE'S NAME. * THE NAME MUST CONTAIN ONLY LEGAL ASCII * CHARACTERS INCLUDING EMBEDDED BLANKS. COMMAS, * + SIGN, - SIGN ARE NOT ALLOWED. * IN ADDITION THE FIRST * CHARACTER MUST BE NON-NUMERIC AND NON-BLANK. * * ISIZE A TWO-ENTRY ARRAY. * FOR CREAT EACH ENTRY IS A SINGLE WORD * ISIZE(1) > 0 NUMBER OF BLOCKS IN FILE * (UP TO 16383) * ISIZE(1) = -1 USE REST OF DISC * * FOR ECREA EACH ENTRY IS A DOUBLE WORD * ISIZE(1) > 0 NUMBER OF BLOCKS IN FILE * ISIZE(1) = -1 USE REST OF DISC * ISIZE(1) < -1 -DOUBLE WORD # OF 128 BLOCK * MULTIPLES IN FILE ** * * ENTRY 2 IS USED ONLY FOR TYPE 2 FILES AND IS THE * RECORD LENGTH. IT IS A SINGLE WORD FOR CREAT AND A DOUBLE * WORD FOR ECREA. * * ** NOTE: THE OPTION ON ECREA OF ISIZE(1) < -1 FOR -DOUBLE * WORD # OF TRACKS IS FOR INTERNAL USE ONLY. IT IS NOT * DOCUMENTED FOR OUTSIDE USERS. * * * ITYPE IS THE FILE TYPE--MUST BE >0. * * IS (OPTIONAL); IS THE FILE'S SECURITY CODE. * IF IS>0 THE FILE IS WRITE PROTECTED. * IF IS<0 THE FILE IS OPEN PROTECTED. * IF IS=0 OR IS NOT CODED THE FILE IS PUBLIC. * * ILU (OPTIONAL); DIRECTS THE CREAT TO: * IF ILU<0 THEN THE DISC AT LOGICAL UNIT (-ILU). * IF ILU>0 THEN THE DISC WITH LABEL ILU. * IF ILU=0 OR NOT CODED, THE FIRST AVAILABLE * DISC WITH ENOUGH ROOM IS USED. * * IBLK (OPTIONAL); SPECIFIES A DCB BUFFER AREA OF * IBLK WORDS. (NORMALLY 128 IS USED.) MUST BE A * MULTIPLE OF 128. THE BUFFER MUST BE AN EVEN * DIVISOR OF THE FILE SIZE SO ONLY PART OF * THE SPECIFIED SIZE MAY BE USED. THE USED SIZE IS: * USED SIZE=FILE SIZE/N WHERE * N=(FILE SIZE/IBLK)+(IF REMAINDER THEN 1,ELSE 0) * * * JSIZE (OPTIONAL) FOR ECREA CALL ONLY * DOUBLE WORD VARIABLE IN WHICH ACTUAL FILE SIZE CREATED IN * +SECTORS OR -TRACKS IS RETURNED IF CREATION IS SUCCESSFUL * * * DUM DUMMY PARAMETER TO SEPERATE ILNAM FROM DOCUMENTED PARAMETERS. * * * ILNAM IF SET TO 70707 OCTAL, CREAT WILL SKIP NAM.. CALL AND ALLOW * A FILE WITH AN ILLEGAL FILE NAME TO BE CREATED. SKP * * ECREA DEC -1 LDA ECREA STA CREAT JMP CREAT+1 * * DCB NOP IERR NOP NAME NOP SIZE NOP TYPE DEF ZERO SC DEF ZERO LU DEF ZERO IBLK DEF ZERO JSIZE DEF ZERO DUM DEF ZERO ILNAM DEF ZERO * * CREAT NOP ENTRY POINT JSB .ENTR TRANSFER THE PARAMETERS DEF DCB LDA TYPE MAKE SURE THERE ARE CPA DZERO ENOUGH JMP ER10 NO - ERROR EXIT JSB CLOSE GO CLOSE THE DCB (IF OPEN) DEF *+2 DEF DCB,I SZA NO ERROR CPA N11 AND NOT OPEN ERROR - OK RSS SO SKIP IF THIS IS THE CASE JMP EXIT ELSE EXIT SOME CLOSE ERROR LDA ILNAM,I DOES CALLER WANT TO CREATE CPA ILNMF A FILE WITH AN ILLEGAL NAME? JMP CR.1 YES - SKIP NAM.. CALL JSB NAM.. GO CHECK THE NAME DEF *+2 DEF NAME,I SZA IF OK SKIP JMP EXIT ELSE EXIT ERROR * * CR.1 LDA NAME,I GOOD NAME SO STA BUF SET ISZ NAME UP DLD NAME,I SKELETON DIRECTORY DST BUF+1 ENTRY IN BUF LDA TYPE,I SZA TYPE MUST BE SSA >0 JMP ER16 NOT >0 ; ERR STA BUF+3 LDA ECREA GET CREAT OR ECREA FLAG SSA ECREA CALL? JMP CR.2 NO - GO PROCESS 2 WORD ISIZE ARRAY DLD SIZE,I YES - ISIZE OF 4 WORDS LONG. GET SIZE JSB .DAD DO RANGE CHECK ON FIRST SIZE DEF DNMSZ PARAMETER SSA WITHIN RANGE? JMP ER30 NO - ERROR 30 DLD SIZE,I OK - GET SIZE AGAIN ISZ SIZE STEP ARRAY POINTER TO 2ND ISZ SIZE ENTRY IN THE SIZE ARRAY JMP CR.3 CR.2 LDB SIZE,I CREAT CALL SO SINGLE WORD ENTRIES ADB NMXSZ MAKE SURE SIZE REQUESTED BY SSB,RSS CREAT WAS 16383 BLOCKS OR LESS JMP ER30 IT WAS > 16383 BLOCKS LDB SIZE,I GET SIZE AGAIN SSB IF SIZE SPECIFIED IS CCB <0 THEN FORCE TO -1 CLA SET UPPER HALF OF DOUBLE WORD SSB IF THIS IS THE -1 CASE JMP CR.4 JUST GO SET 0,-1 IN BUFFER CR.3 SWP GET UPPER BITS TO B-REG SSB,RSS IF THIS IS POSITIVE DOUBLE WORD ASL 1 # OF BLOCKS, THEN CONVERT TO SECTORS SWP HIGH BITS TO A-REG AGAIN SZA,RSS IF DOUBLE WORD ZERO SZB THEN ILLEGAL SIZE ERROR RSS JMP ER16 CR.4 DST BUF+5 STORE REQUEST SIZE IN STRING FOR D.RTR ISZ SIZE STEP TO RECORD SIZE (FOR ECREA THIS STEPS TO 2ND WORD * OF THE RECORD SIZE LDA SIZE,I LDB BUF+3 GET TYPE CPB .1 IF TYPE=1 LDA .128 SET SIZE TO 128 CMA,INA NEGATE RECORD SIZE (NOW IF VALID ONLY IF NEGATIVE) CPB .2 IF TYPE TWO SIZE MUST BE GIVEN SSA VALID? RSS YES; OR NOT TYPE TWO SKIP JMP ER4 ELSE ERROR CMA,INA MAKE RECORD SIZE POSITIVE AGAIN ADB N3 IF THIS FILE IS TYPE 3 OR GREATER SSB,RSS THEN SET RECORD SIZE CLA TO 0 AUTOMATICALLY STA BUF+7 SET RECORD SIZE LDA SC,I SET STA BUF+8 SECURITY CODE * * CLA,INA GET OVERRIDE BITS ADA OVRD. FOR D.RTR CALL STA TMP JSB EXEC SCHEDULE DEF SCHRT D.RTR DEF .23 TO DEF D.R CREAT DEF XEQT THE DEF TMP FILE DEF LU,I PASSING DZERO DEF ZERO THE DEF ZERO STRING DEF BUF DEF .9 * * SCHRT JSB RMPAR CALL RMPAR DEF *+2 TO GET DEF BUF RETURN CODES * JSB EXEC RETRIEVE DEF *+5 THE STRING DEF .14 RETURNED BY DEF .1 D.RTR DEF STR DEF .6 * CLB,CLE LDA STR GET PARAMETER WITH 'ON-SYSTEM-DISC' SSA FLAG. BIT 15 SET? LDB =B20 YES - SET BIT 4 STB TMP IN TEMPORARY FLAG RAL,ERA CLEAR BIT 15 IN 1ST PARAMETER STA STR AND PUT IT BACK LDA BUF GET D.RTR COMPLETION SSA CODE - OK JMP EXIT NO; TAKE EXIT LDA BUF+1 YES; SET UP STA DCB,I FIRST 2 LDB DCB WORDS OF CLE,INB THE DCB LDA BUF+2 STA B,I LDA DCB LDB ASTR STO SET UP FOR A UPDATE OPEN JSB $OPEN SET UP REST OF DCB DEF IBLK,I ADDRESS OF BLOCK SIZE DEF BUF+4 ADDRESS OF NO OF SECTORS/TRACK JMP EXIT DISC ERROR - EXIT LDB DCB GET DCB ADDRESS ADB .7 POSITION TO WORD WITH SECURITY CODE FLAG LDA B,I CCE SET SC FLAG (BIT 15) RAL,ERA TO INDICATE READ AND ADA TMP ADD IN ON-SYSTEM-DISC FLAG STA B,I WRITE ACCESS IS ALLOWED FOR THIS FILE LDA TYPE,I GET TYPE ADA N3 IF 3 OR MORE CCE,SSA SKIP TO WRITE EOF JMP EXIT0 NOT RANDOM ACCESS FILE LDA B,I GET DCB WORD 7 AGAIN RAR,ELA STA B,I SET WRITTEN ON FLAG CCA ADB .9 STEP TO THE BUFFER AND SET EOF STA B,I IN FIRST WORD OF BUFFER EXIT0 LDA ECREA GET CREAT\ECREA CALL FLAG SSA ECREA CALL? JMP EXIT2 NO - GO HANDLE CREAT CALL LDA STR+3 GET FILE SIZE FOR RETURN PARAMS CLB SSA,RSS IF SIZE IS ALREADY +SECTORS JMP EXIT1 THEN GO RETURN IT CMA,INA MAKE -QUANTITY POSITIVE LSL 8 MULTIPLY BY 128 BLOCKS (256 SECTORS) EXIT1 SWP SWAP REGISTERS DST JSIZE,I RETURN FILE SIZE IN JSIZE LDA BUF USE D.RTR RETURN FOR ERROR JMP EXIT AND GO EXIT EXIT2 LDA BUF CREAT CALL - GET D.RTR RETURN SSA,RSS ERROR? (NEGATIVE?) LDA STR+3 NO - GET FILE SIZE AND RETURN IT INSTEAD EXIT LDB DZERO CODE STB SC RESTORE STB LU CALL WORDS STB TYPE FOR NEXT CALL STB IBLK STB JSIZE STB DUM STB ILNAM CCB RESET CREAT\ECREA STB ECREA FLAG CLB CLEAR OUT DOUBLE WORD STB ZERO ZERO IN CASE USER STB ZERO+1 DID NOT SUPPLY JSIZE PARAMETER STA IERR,I SET ERROR CODE JMP CREAT,I AND EXIT * * * ER4 LDA N4 SET ERROR JMP EXIT CODE ER10 LDA N10 AND JMP EXIT EXIT ER16 LDA N16 GET THE ERROR CODE JMP EXIT TAKE EXIT ER30 LDA N30 JMP EXIT * * * .1 DEC 1 .2 DEC 2 .6 DEC 6 .7 DEC 7 .9 DEC 9 .14 DEC 14 .23 DEC 23 .128 DEC 128 * N3 DEC -3 N4 DEC -4 N10 DEC -10 N11 DEC -11 N16 DEC -16 N30 DEC -30 NMXSZ DEC -16384 DNMSZ OCT 0 KEEP THESE OCT 100000 TWO TOGETHER * B377 OCT 377 ILNMF OCT 70707 TMP NOP ZERO BSS 2 BUF BSS 11 STR EQU BUF+5 ASTR DEF STR * A EQU 0 B EQU 1 XEQT EQU 1717B * END EQU * * END