; OPCHNL
;
; OPEN A READ CHANL WITH 2 BUFFERS
; WILL INSERT SA IN LINTAB
; AND INITS ALL POINTERS.
; RELATIVE SS AND PTRS ARE SET.
;
OPNRCH LDA #2 ;GET TWO DATA BUFFERS
 JSR GETRCH
 JSR INTPNT ;CLEAR POINTERS
 LDA TYPE
 PHA
 ASL A
 ORA DRVNUM
 STA FILTYP,X ;SET FILE TYPE
 JSR STRDBL ;READ 1ST ONE OR TWO BLOCKS
 LDX LINDX
 LDA #2 ;SET GET SWITCH
 STA REGET,X ;*
 LDA SECTOR ;<HD>
 CMP #255 ;CHK END OF CHAIN <HD>
 BNE OR10
;
 LDA TRACK ;<HD>
 STA LSTCHR,X ;SET LAST CHAR PTR
OR10
 PLA
 CMP #RELTYP
 BNE OR30 ;MUST BE SEQUENTIAL STUFF
;
 LDY SA
 LDA LINTAB,Y ;SET CHANNEL AS R/W
 ORA #$40
 STA LINTAB,Y
;
;
 LDA REC
 STA RS,X ;SET RECORD SIZE
;
 JSR GETBUF ;GET SS BUFFER
 BPL OR20
 JMP GBERR ;NO BUFFER
OR20
 LDX LINDX ;GET FCB NUMBER
 STA SS,X ;SAVE THE SIDE SECTOR BUFFER #
;
;SAVE ADDR OF SUPER SIDE SECTOR
;  <BIG FILES CHANGE>
;
 LDA TRKSS ;TRK ADDR OF SSS
 STA SSSTRK,X ;SAVED
 LDA SECSS ;SEC ADDR OF SSS
 STA SSSSEC,X ;SAVED
 LDA #255 ;NO GROUP RESIDENT
 STA SSSGRP,X ;*
;
OROW
;
 LDX LINDX
 LDA #2
 STA NR,X ;SET FOR NXTREC
;
 LDA #0
 JSR SETPNT ;SET FIRST DATA BYTE
;
 JSR RD40 ;SET UP 1ST RECORD
 JMP GETHDR ;RESTORE T&S
;
OR30
 JSR RDBYT ;SEQUENTIAL SET UP
 LDX LINDX
 STA CHNDAT,X
 LDA #RDYTLK
 STA CHNRDY,X
 RTS
;
; INITIALIZE VARIABLES FOR OPEN CHANL
; LSTJOB,SETS ACTIVE BUFFER#,LSTCHR,
; BUFFER POINTERS IN BUFTAB=2
;
INTPNT LDX LINDX
 LDA DRVNUM
 LDY BUF0,X
 STA LSTJOB,Y
 LDY BUF1,X
 STA LSTJOB,Y
 STA JOBS,Y
 LDA BUF0,X
 ASL A
 TAY
 LDA #2
 STA BUFTAB,Y
 LDA BUF1,X
 ORA #$80
 STA BUF1,X
 ASL A
 TAY
 LDA #2
 STA BUFTAB,Y
 LDA #0
 STA NBKL,X
 STA NBKH,X
 LDA #0
 STA LSTCHR,X
 RTS
;
;
; OPEN A WRITE CHANL WITH 2 BUFFERS
OPNWCH JSR INTTS ;GET FIRST TRACK,SECTOR
OPNWCD
 LDA #2
 JSR GETWCH ;GET 2 BUFFERS FOR WRITING
 JSR SETHDR ;SET UP BUFFER HEADERS
 JSR INTPNT ;ZROPNT
 LDX LINDX
 LDA TYPE
 PHA
 ASL A
 ORA DRVNUM
 STA FILTYP,X ;SET FILTYP=SEQ
 PLA
 CMP #RELTYP
 BEQ OW10
 LDA #RDYLST ; ACTIVE LISTENER
 STA CHNRDY,X
 RTS
; RELATIVE FILE ONLY
OW10
 LDY SA
 LDA LINTAB,Y
 AND #$3F
 ORA #$40
 STA LINTAB,Y ;SET CHANNEL AS R/W
;
 LDA REC
 STA RS,X ;SET RECORD SIZE
;
 JSR GETBUF ;GET SS BUFFER
 BPL OW20
 JMP GBERR ;NO BUFFER
OW20
 LDX LINDX
 STA SS,X
 JSR CLRBUF ;SET BUFR = FF'S <HD>
;
 JSR NXTTS
 LDA TRACK
 STA TRKSS ;SAVE SS T&S
 LDA SECTOR
 STA SECSS
;
 LDX LINDX
 LDA SS,X
 JSR SETH ;SET SS HEADER
 LDA #0
 JSR SETSSP
 LDA #255 ;SET EOL  <HD>
 JSR PUTSS
 LDA #SSIOFF+1 ;SET LAST CHAR
 JSR PUTSS
 LDA #0 ;SET THIS SS #
 JSR PUTSS
 LDA REC ;RECORD SIZE
 JSR PUTSS
 LDA TRACK
 JSR PUTSS
 LDA SECTOR
 JSR PUTSS
 LDA #SSIOFF
 JSR SETSSP
 JSR GETHDR ;GET FIRST DATA T&S
 LDA TRACK
 JSR PUTSS
 LDA SECTOR
 JSR PUTSS
;
 JSR WRTSS ;WRITE IT OUT
 JSR WATJOB
;
; <BIG FILE CHANGES>
;
 LDX LINDX ;FCB #
 LDA SS,X ;GET SS BUFR #
 JSR CLRBUF ;SET = ALL FF'S
 LDA #0 ;POINT TO BYTE 0
 JSR SETSSP ;*
 LDA SECSS ;LINK TO FIRST SS
 JSR PUTSS ;*
 LDA TRKSS ;*
 JSR PUTSS ;*
 LDA #254 ;SS # FIELD = 254
 JSR PUTSS ;*
 LDA SECSS ;FIRST GROUP SS ADDR
 JSR PUTSS ;*
 LDA TRKSS ;*
 JSR PUTSS ;*
 JSR NXTTS ;GET ADDR FOR SSS
 LDX LINDX ;FCB #
 LDA TRACK ;SAVE SSS ADDR
 STA SSSTRK,X ;*
 STA TRKSS ;*
 LDA SECTOR ;*
 STA SSSSEC,X ;*
 STA SECSS ;*
 LDA #255 ;MARK NO GROUP IS RESIDENT
 STA SSSGRP,X ;*
 JSR WRTSSS ;WRITE THE SSS TO DISK
 JSR GETHDR
 LDA #2
 JSR SETPNT
;
 LDX LINDX ;SET NR FOR NULL BUFFER
 SEC
 LDA #0
 SBC RS,X
 STA NR,X
;
 JSR NULBUF ;NULL RECORDS
 JSR NULLNK
 JSR WRTOUT
 JSR WATJOB
 JSR MAPOUT ;UP DATE DISK BAM
 JMP OROW
;
;*
;*
;***********************
;*
;* PUTSS
;*
;* PUT BYTE INTO SIDE SECTOR
;*
;***********************
;*
;*
PUTSS PHA
 LDX LINDX
 LDA SS,X
 JMP PUTB1
;
.END
