home *** CD-ROM | disk | FTP | other *** search
- { [SF.PAS of JUGPDS Vol.16] 85-09-15 }
- { }
- { Fortran Coding Format Converter: Standard to Free Format }
- { }
- { by H. Miyasaka (JUG-CP/M, No.6) }
- { Created 85/02/24 Ver 1.0 }
- { Updated 85/04/29 1.0A ... all left delete }
- { }
-
- program sf;
- const
- MAXLINE = 80;
-
- type
- maxstr = string[MAXLINE]; { max input line }
- filstr = string[15]; { filename }
-
- var
- Buff1 : maxstr; { input buff 1 }
- Buff2 : maxstr; { input buff 2 }
-
- inf : text;
- tempf : text;
- eraf : text;
-
- infile : filstr; { input filename }
- tempfile : filstr; { temporary filename }
- outfile : filstr; { output filename }
-
- options : maxstr; { dummy }
-
- cond,fend : boolean;
-
- procedure exit;
- begin
- bdos(0);
- end;
-
- function exist(filename:filstr):boolean;
- var
- fil : text;
- begin
- assign(fil,filename);
- {$I-}
- reset(fil);
- {$I+}
- exist := (ioresult = 0)
- end;
-
- procedure delleft(var st:maxstr);
- var
- i : byte;
- begin
- i := 1;
- while copy(st,i,1) = ' ' do
- i := i + 1;
- delete(st,1,i-1);
- end;
-
- procedure delmid(var st:maxstr);
- var
- temps : maxstr;
- i,j : byte;
- begin
- temps := ' ';
- j := 0;
- for i:=1 to length(st) do
- if st[i] <> ' '
- then
- begin
- j := j + 1;
- insert(st[i],temps,j);
- end;
- st := temps;
- end;
-
- procedure arguments(var arg1:filstr;var arg2:maxstr;var cond:boolean);
- label
- 001;
- var
- arg : maxstr absolute $0080;
- i : byte;
- begin
- if length(arg) = 0
- then
- cond := False
- else
- begin
- delleft(arg);
- for i := 1 to length(arg) do
- if (arg[i] = ' ') or (arg[i] = '[')
- then
- begin
- arg2 := copy(arg,i,length(arg)-i+1);
- goto 001;
- end;
- arg1 := copy(arg,1,i);
- 001: cond := True;
- end;
- end;
-
- procedure outputf(var infile,tempfile,outfile:filstr);
- var
- name : filstr;
- i : byte;
- begin
- i := pos ('.',infile);
- if i = 0
- then
- begin
- name := infile;
- infile:= infile + '.FOR';
- end
- else
- name := copy(infile,1,i-1);
- tempfile := name + '.$$$';
- outfile := name + '.FRE';
- end;
-
- procedure linput(var st:maxstr;var fend:boolean);
- begin
- if not EOF(inf)
- then
- begin
- readln(inf,st);
- fend := False
- end
- else
- fend := True;
- end;
-
- procedure condense(var texts:maxstr);
- var
- text1,text2:maxstr;
- i : byte;
- begin
- text1 := copy(texts,1,6);
- text2 := copy(texts,7,length(texts)-6);
- delmid(text1);
- delleft(text2);
- if text1 = ' '
- then
- texts := text2
- else
- texts := text1 + text2;
- end;
-
- procedure lastbar(var texts:maxstr);
- var
- i : byte;
- begin
- i := length(texts);
- texts := texts + ' ';
- while texts[i]=' ' do
- i := i - 1;
- texts[i+1] := '-';
- end;
-
-
- begin
- arguments(infile,options,cond);
- if not cond
- then
- begin
- writeln('Fortran Standard-Format to Free-Format Converter.');
- writeln('Usage : sf file-name');
- exit;
- end;
- writeln('---------------------------------------------------------');
- writeln('Fortran Standard-Format to Free-Format Converter Ver 1.0A');
- writeln('---------------------------------------------------------');
- outputf(infile,tempfile,outfile);
- if not exist(infile)
- then
- begin
- writeln(infile,' not found');
- exit;
- end;
- assign(inf,infile);
- assign(tempf,tempfile);
- reset(inf);
- rewrite(tempf);
- linput(Buff1,fend);
- if fend
- then
- begin
- writeln(infile,' is empty');
- exit;
- end;
- while not fend do
- begin
- Buff2 := Buff1;
- linput(buff1,fend);
- if fend
- then
- Buff1 := '';
- if (Buff2[1]='C') or (Buff2[1]='*')
- then
- Buff2[1] := '"'
- else
- begin
- if (Buff1[6]<>' ') and (Buff1[6]<>'0')
- then
- begin
- Buff1[6] := ' ';
- lastbar(Buff2);
- end;
- condense(Buff2);
- end;
- writeln(tempf,Buff2);
- end;
- close(inf);
- close(tempf);
- if exist(outfile)
- then
- begin
- assign(eraf,outfile);
- erase(eraf);
- end;
- rename(tempf,outfile);
- writeln;
- writeln('complete');
- end.
-