home *** CD-ROM | disk | FTP | other *** search
- program toxmodem
- c convert VAX text file to
- c file of XMODEM 128 byte records with embedded <CR><LF>
-
- character*254 line,input,output
- character*1 CR,LF,c
- integer blank
- logical eof,eol
- data eof,eol/.false.,.false./
-
- CR=char(13)
- LF=char(10)
- call lib$get_foreign(line,'$_From To: ',)
-
- blank=index(line,' ')
- input=line( 1:blank )
- output=line( blank:)
-
- open(6,file=input,status='OLD')
- open(7,file=output,status='NEW',carriagecontrol='LIST',
- 1 recl=128,recordtype='FIXED')
-
- c getchar (read new line if no input characters left)
- c putchar ( output record if full, close if EOF )
- c if EOL on input, putchar CR putchar LF (output record if full)
- c loop
-
- 100 call getchar(c,eof,eol)
- if(.not.eol) then
- call putchar(c,eof)
- else
- c end of line
- call putchar(CR,eof)
- call putchar(LF,eof)
- eol=.false.
- endif
- go to 100
-
- end
- c-------------------------------------------
- subroutine getchar(inchar,eof,eol)
- character*1 inchar
- logical eof,eol
- c get character from input line (read line if necessary)
- c returns character and eol=.true. if no more char on line
- c returns eof if end of file (no character)
- character*255 line
- integer len, pos
- logical firsttime
- common/lincom/pos,len
- common/lin2com/line
- data pos/0/
-
- if(pos.eq.0) then
- read(6,1000,end=100)len,line(1:len)
- 1000 format(q,a)
- c print*,' line=',line
- endif
- pos=pos+1
- if(pos.gt.len) then
- eol=.true.
- pos=0
- return
- endif
- c print*,' pos=',pos,' line(1:pos)=',line(1:pos)
- c print*,' line(pos:pos)=',line(pos:pos)
- inchar=line(pos:pos)
- c print*,' pos,char',pos,inchar
- return
-
- c EOF
- 100 continue
- eof=.true.
- return
- end
- c------------------------------------------
- subroutine putchar(c,eof)
- character*1 c
- logical eof
- c put character into record (write record if necessary)
- c if eof, fills out rest of record with CTRL-Z's and exits
- character*1 CTRLZ
- character*128 record
- integer point
- common /reccom/point
- common /rec2com/record
- data point/0/
-
- if(eof) goto 200
- point=point+1
- c strip parity in case VAX file had it
- record(point:point)=char(iand(ichar(c),127))
- c print*,' record(point:point)=',record(point:point)
- c print*,' point=',point
- 50 if(point.ge.128) then
- c print*,' record=',record
- 100 write(7,1000) record
- 1000 format(a)
- point=0
- endif
- return
-
- c EOF fill record with 26's (CTRL-Z, CP/M end of file mark for ASCII)
- c output last record and exit
- 200 continue
- c print*,' in putchar EOF section'
- CTRLZ=char(26)
- do i=point+1,128
- record(i:i)=CTRLZ
- enddo
- c print*,' record=',record
- write(7,1000) record
- close(6)
- close(7)
- call exit
- end
-