ASMB,R,L,C
      HED T0DCB - FMP DCB MAKER FOR TYPE 0 FILES 9/10/73 (DLB)
*5-9      NAM T0DCB,7 PRE-REL 3-10-76 (DLB) 
*     NAM T0DCB,7 PRE-REL 5-14-76 (DLB) 
*     NAM T0DCB,7 PRE-REL 10-20-76 (DLB)  
      NAM T0DCB,7 09570-16538 REV. A 761020 
* 
*-------------------------------------------------------- 
* 
*     RELOC.       09570-16538
*     SOURCE       09570-18538
* 
*     D. BASKINS         13 OCT 76 REV. A 
* 
*---------------------------------------------------------
* 
      ENT T0DCB 
      EXT P.PAS,.ENTR,EXEC,CLOSE
      SPC 1 
A     EQU 0 
B     EQU 1 
XEQT  EQU 1717B 
      SPC 1 
*  PURPOSE: 
*  TO BUILD A PHONY TYPE 0 FILE DCB FOR FMP GIVEN AN LOGICAL UNIT NUMB. 
*     USED: 
* 
*      IF (T0DCB(IDCB,IERR,LU) 99,10
*   99 GO TO <OPEN ERROR> 
*   10 GO TO <GOOD OPEN>
* 
*     WHERE:
*      IDCB IS A 16 WORD DCB FOR USE WITH READF/WRITF 
*      IERR IS = 0 IF NO ERROR -OR- -6 IF ILLEGAL LOGICAL UNIT #. 
*      LU   IS THE LOGICAL UNIT # WITH -OR- WITHOUT CONWORD BITS. 
* 
*     NOTE: 
*  IF CONWORD BITS ARE NOT SUPPLIED IN THE LOGICAL UNIT, THE FOLLOWING
*  TABLE IS USED TO DEFAULT THEM BASED ON DRIVER TYPE FOR THE LU. 
*  ASCII DATA WITH THE PRINT BIT IS THE GENERAL DEFAULT.
      SPC 1 
DEF0  DEF ZER0
DTABL DEF ZER0-2
*                     DVRXX         WR/RE  FS/BS  EOFC XAKVM
ZER0  OCT 0,160704   1 1    0 0    07    04  CONSOLE
      OCT 1,050700   0 1    0 0    07    04  READER 
      OCT 2,161000   1 0    0 0    10    00  PUNCH
      OCT 5,160704   1 1    0 0    07    04  CONSOLE
      OCT 10,100000  1 0    0 0    00    00  PLOTTER
      OCT 11,060700  0 1    0 0    07    00  CARD RD
      OCT 12,101100  1 0    0 0    11    00  LINE PT
      OCT 15,060700  0 1    0 0    07    00  CARD RD
      OCT 23,170100  1 1    1 1    01    00  MAGTAPE
      OCT 24,170100  1 1    1 1    01    00  MAGTAPE
      OCT 25,170100  1 1    1 1    01    00  MAGTAPE
      OCT -1,160100  1 1    0 0    01    00  DEFAULT
      SPC 1 
DCB   NOP 
ERR   NOP 
LU    DEF ZER0
T0DCB NOP          ENTRY
      JSB .ENTR    GET PARAMETER ADDRESSES
      DEF DCB      TOP OF STACK 
      JSB CLOSE     CLOSE UP THE DCB
      DEF *+2 
      DEF DCB,I     JUST IN CASE IT IS OPEN 
      LDA DM10     GET PARAMETER ERROR VALUE
      LDB LU       CHECK IF NAME PASSED?
      CPB DEF0     SAME?
      JMP EXIT     YES, RETURN NOT ENOUGH PRAMS.
      ADA DM6       FORM -16 IN A-REG 
      STA TEMP1     SAVE THE ZERO COUNTER 
      LDA DCB      GET DCB ADDRESS
      CLB,CLE      GET DCB ADDRESSES
ZERO1 STB A,I       ZERO OUT THE DCB 1ST
      INA 
      ISZ TEMP1     DONE? 
      JMP ZERO1     NO, CONTINUE
      LDA DCB       GET THE DCB ADDRESS 
      JSB P.PAS    USING FMP UTILITY
DM10  DEC -10 
TEMP1 NOP 
TEMP2 NOP 
TYPE  NOP          TYPE CODE ADDRESS
LU0   NOP          LOGICAL UNIT ADDRESS 
EOF0  NOP          EOF CODE ADDRESS 
SPAC  NOP          SPACING CODE ADDRESS 
R/WCD NOP          READ/WRITE VALITY CODES
OPFLG NOP          SECURITY FLAGS ADDRESS 
#SC/T NOP          NUMBER SECTORS/TRACK 
IDSEG NOP          OPEN TEST (ID SEG. ADDRS)
      LDA LU,I      GET THE LOGICAL UNIT
      AND O3777     CHECK IF LEGAL
      CPA LU,I
      RSS           YES, CONTINUE 
      JMP FMPM6     NO, FMP ERROR -6
      AND O77       MASK OFF ICON BITS
      STA TEMP1     AND SAVE
      JSB EXEC     GET EQUIPMENT TYPE CODE
      DEF *+4      CALL EXEC (13,LU,IEQT5)
      DEF NA13      DEC 13+100000B
      DEF TEMP1    LU OF DEVICE 
      DEF TEMP2    VALUE OF EQT 5 
      JMP FMPM6     ILLEGAL LU = FMP ERR -6 
      LDA TEMP2    CONVERT EQT 5 TO THE 
      ALF,ALF      POSITION 
      AND O77      DRIVER NAME
      STA TEMP2 
      LDB DTABL    GET START OF TABLE 
MEQTS ADB D2       AND FIND A MATCH WITH
      LDA B,I      THE DRIVER NAME. 
      SSA,RSS      TABLE TERMINATES WITH -1 
      CPA TEMP2    = TO DRIVER NAME?
      INB,RSS      YES, PICK UP BITS
      JMP MEQTS    NO, TRY NEXT ONE 
      LDB B,I      NOW, DEFINE DCB VALUES 
      RRL 2        POSITION READ/WRIT CODE
      AND D3       MASK OFF EXTRANIOUS BITS 
      RAR          POSITION BITS 0 & 15 
      STA R/WCD,I  SAVE IN DCB
      RRL 2        POSITION SPACING CODES 
      AND D3
      RAR          POSITION BIT 0-15
      STA SPAC,I   PUT IN DCB 
      RRL 6 
      ALF          POSITION 
      RAL,RAL      AND POSITION TO CONWD BITS 
      AND O3700    MASK OF OTHER BITS 
      IOR TEMP1    MIRGE IN LOGICAL UNIT
      STA EOF0,I   AND PUT IN DCB 
      LDA LU,I      GET THE PASSED CONWORD BITS 
      XOR TEMP1     TAKE OUT THE LU 
      RRR 4        THE CONWORD BITS IN TABLE
      SZA           CHECK IF ANY CONWORD BITS 
      RRR 12       SUPPLIED BY CALLER 
      SWP 
      AND O3700    MASK TO CONWORD BITS 
      IOR TEMP1    MIRGE IN LOGICAL UNIT
      STA LU0,I    PUT IN DCB 
      LDA XEQT     GET IDSEG ADDRESS FOR
      STA IDSEG,I  THIS PROGRAM 
      CLA,CCE      SET FILE TYPE
      STA TYPE,I
      ERA          SET TO NON EXCULSIVE 
      STA OPFLG,I  OPEN 
      CLA,INA       PRESET THE LINE NUMBER TO 1 
      LDB IDSEG     CALCULATE ADDRESS OF THE RECORD NUMBER
      ADB O5        WORD IN THE DCB 
      STA B,I       RECORD = #1 FOR NEXT READ OR WRITE
      CLA,RSS      NOW RETURN TO CALLER 
FMPM6 LDA DM6      GET -6 ERROR RETURN
EXIT  LDB DEF0     RESET FOR NEXT CALLER
      STB LU
      STA ERR,I    SET ERROR CODE 
      JMP T0DCB,I  AND RETURN 
      SPC 1 
NA13  OCT 100015    DEC 13 + 100000B
D2    DEC 2 
D3    DEC 3 
O5    OCT 5 
DM6   DEC -6
O3700 OCT 3700
O3777 OCT 3777
O77   OCT 77
      END 
                                                                                                                                                                                    