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