File COSOS8.QS

Directory of image this file is from
This file as a plain text file

 START  ;COSOS8...COS DATA FILE TO QBOL DATA FILE
 SPACE 3
		;***NOTE***
	;THE INTERNAL STRUCTURE OF COS DATA FILES IS THE SAME AS THE
	;INTERNAL STRUCTURE OF QBOL DATA FILES...ALL WE HAVE TO
	;DO IS STRIP OFF THE HEADER BLOCK FROM THE COS FILE
	;THE STRIPPED FILE IS THEN TRANSFERRED TO AN OS8 FILE
	;
	;
	; WE WILL USE BLOCK COPY 'CAUSE IT IS SOOOO FAST (AND I DON'T
	; KNOW HOW ELSE TO DO IT).
 SPACE 2
 RECORD ,C    ;THE DATA BUFFER
	BX,	B1    ;STANDARD SET-UP FOR SYSTEM CALLS
	,	B1
	,	B1
	DATA,	B1
	,	A510
	,	A512
	,	A512
	,	A512
	,	A512
	,	A512
	,	A512
	,	A512  ;8 BLOCKS =16 PAGES=1/2 SECTOR
 SPACE 2
 RECORD TTY,C
	TTYIN,	A40
 SPACE 2
 RECORD IO,C
	A1,	D2  ;HOW TO OPEN THE FILE 
	A2,	D2  ;INTERNAL FILE NUMBER (WILL USE 1)
	A3,	D2  ;EXTERNAL DEVICE NUMBER
	A4,	A8   ;FILE NAME
 SPACE 2
		;ANNOUCE WHAT IS GOING ON
 RECORD MISC1,C
	,	A9,'SEGMENTS='
	SEC,	D4  ; SEGMENTS ON TAPE
	,	A1
	,	A8,'BLOCKS= '
	SIZE,	D4  ;BLOCKS
	,	A1
	,	A10,'TAPE EDN= '
	TEDN,	D2  ;TAPE E.D.N. (12?)
	,	A1
	,	A10,'TAPE FBA= '
	TSB,	D4  ;STARTING BLOCK..FOR WEIRD SYSGENS
 SPACE 2
 RECORD MISC3,C
	,	A26,'MINIMUM SEGMENTS TO READ='
	MINS,	D2

 SPACE 2
 RECORD LOCAL,C
	DFBA,	D4   ;F.B.A. FOR OUTPUT DISK FILE
	TFBA,	D4   ;COUNT CURRENT POSISTION FOR BLOCK COPY
	CNT,	D4    ;COUNT NUMBER OF TRANSFERS NECC (8 BLOCKS PER)
 PROC    ;COS TO 0S8 FILES (BINARY)
 SPACE 3
 L0,
	XMIT(8,"LOAD TAPE..GIVE # BLOCK FOR OFFSET OR CR')
	XMIT(7,TTY)
	ON ERROR L0
	TSB=TTYIN(1,3)  ;USUALLY 0
	ON ERROR

		;GET THE EDN OF THE INPUT UNIT
 ASKEDN,
	XMIT(8,"GIVE EXTERNAL DEVICE NUMBER FOR INPUT OR (CR) FOR EDN=12 (DTA0)')
	XMIT(7,TTY)
	TEDN=12	;DEFAULT VALUE (DTA0)
	ON ERROR ASKEDN
	IF(TTYIN(1,1).NE.' ') TEDN=TTYIN(1,2)
 SPACE 2
	BX=TEDN
	BX(2)=TSB
	BX(3)=2   ;1 BLOCK
	SYSTEM(4,BX)  ;BLOCK COPY THE COS HEADER IN
 SPACE 2
		;CRACK THE HEADER BLOCK FROM COS FILE
		;7 TH WORD HAS NUMBER OF SECTORS 
	SEC=(DATA(7).AND.77B)
	CNT=SEC+SEC	;NUMBER OF 8 BLOCK READS
	SIZE=CNT*8	;NUMBER OF BLOCKS
 SPACE 2
			;OPEN A DISK FILE
	XMIT(8,"GIVE OUTPUT FILE NAME FFFFFFEE')
	XMIT(7,TTY)
	IF(TTYIN(7,7).EQ.'.') TTYIN(7,8)=TTYIN(8,9)  ;ROLL OUT THE '.'
	A4=TTYIN(1,8)
  M0,
	XMIT(8,"E.D.N. FOR OUTPUT FILE')
	ON ERROR M0
	XMIT(7,TTY)
	A3=TTYIN(1,2)
 SPACE 3
		;CHECK TO SEE IF FILE ALREADY EXISTS
	A1=16  ;EXISTING FILE
	A2=01	;AS GOOD A CHOICE AS ANY
	ON ERROR NOFILE
	OPEN(A1)
			;OH OH...FILE EXISTS
	XMIT(8,"FILE OF THIS NAME ALREADY EXISTS..DO YOU WANT TO DELETE IT?')
	XMIT(7,TTY)
	IF(TTYIN(1,1).NE.'Y') GO TO DIE   ;JUST FORGET IT
		;O.K. LET US DELETE IT (ACTUALLY THE '17' OPEN WILL DELETE IT TOO)
	CLOSE(1,0)  ;DESTROYED
 SPACE 1
 NOFILE,
	ON ERROR   ;GET RID OF HANGING ON ERROR TO NOFILE
	A1=17    ;BINARY FILE, NEW, WRITE MODE
	ON ERROR NROOM  ;IN CASE DIRCTORY IS FULL
	OPEN(A1)
	ON ERROR
			;GET FIRST BLOCK ADDRESS PLEASE
	BX=A2
	SYSTEM(3,BX)
	DFBA=BX(2)
	IF(DFBA.LT.0) DFBA=DFBA+4096  ;BINARY RANGE TROUBLE IF >2048
 SPACE 2
 M1,
		;DISPLAY THE INFO HERE
	XMIT(8,"INPUT DATA:')
	XMIT(8,MISC1)
	XMIT(8,MISC3)
	XMIT(8,"ENTER MINIMUM NUMBER OF SEGMENTS TO READ (OR CR TO CONTINUE)')
	XMIT(7,TTY)
	ON ERROR M1
	MINS=TTYIN(1,2)
	IF(MINS.LT.SEC) GO TO M2
	SEC=MINS
	CNT=SEC+SEC
	SIZE=CNT*8
	GO TO M1
 SPACE 2
		;OK. CREATE FILE OF DESIRED LENGTH
 M2,
	ON ERROR NROOM
	CLOSE(A2,SIZE)
	ON ERROR
 SPACE 1
	XMIT(8,"OUTPUT FILE CREATED..WILL TRANSFER DATA NOW')
		;READY FOR THE TRANSFER
	TFBA=TSB+1  ;ONE PAST THE HEADER
	BX(3)=16    ;PAGES=8 BLOCKS
 SPACE 2
 LOOP,
	IF(CNT.LE.0) GO TO DONE
	BX=TEDN
	BX(2)=TFBA
	SYSTEM(4,BX)   ;BLOCK COPY 8 BLOCKS IN
	BX=A3      ;DISK EDN
	BX(2)=DFBA
	SYSTEM(5,BX)  ;NOW BLOCK COPY THE 8 BLOCKS OUT

	TFBA=TFBA+8
	DFBA=DFBA+8
	DECR CNT
	GO TO LOOP
 SPACE 2
 DONE,
	XMIT(8,"FILE TRANSFERED')
 SPACE 2
 ASKMORE,
	XMIT(8,"DO YOU WANT TO PROCESS MORE?')
	XMIT(7,TTY)
	ON ERROR ASKMORE
	IF(TTYIN(1,1).EQ.'N') GO TO DIE
	IF(TTYIN(1,1).NE.'Y') GO TO ASKMORE
	GO TO L0    ;AGAIN
 SPACE 2
  DIE,
	XMIT(8,"NORMAL END FOR COSOS8.QB ........BYE')
	STOP
 SPACE 3
 NROOM,
	XMIT(8,"NOT ENOUGH ROOM ON DISK OR DIRECTORY ERROR')
	STOP
 SPACE 3
END



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search