diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
commit | ad547a6b5986815fda458221149728d9d9ab1d87 (patch) | |
tree | 16296910eb3eca724371474ea9aea3994dc69614 /Build/source/texk/web2c/cwebdir/comm-ql.ch | |
parent | 947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff) |
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/cwebdir/comm-ql.ch')
-rw-r--r-- | Build/source/texk/web2c/cwebdir/comm-ql.ch | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/cwebdir/comm-ql.ch b/Build/source/texk/web2c/cwebdir/comm-ql.ch new file mode 100644 index 00000000000..c03b9185cb9 --- /dev/null +++ b/Build/source/texk/web2c/cwebdir/comm-ql.ch @@ -0,0 +1,277 @@ +This is the change file for CWEB's COMMON under QSOD/SMSQ +(Contributed by Robert H. Klein, September 1994) + +This change file is intended for use with C68 v4.13 (or later). +compile with +ex <dev_>cc;'-v -h -c -=500000 -DCWEBINPUTS=flp2_ common_c' + + + +@x +\def\v{\char'174} % vertical (|) in typewriter font + +\def\title{Common code for CTANGLE and CWEAVE (Version 4.2)} +\def\topofcontents{\null\vfill + \centerline{\titlefont Common code for {\ttitlefont CTANGLE} and + {\ttitlefont CWEAVE}} + \vskip 15pt + \centerline{(Version 4.2)} + \vfill} +\def\botofcontents{\vfill +\noindent +@y +\def\v{\char'174} % vertical (|) in typewriter font + +\def\title{Common code for CTANGLE and CWEAVE (QL Version 4.2)} +\def\topofcontents{\null\vfill + \centerline{\titlefont Common code for {\ttitlefont CTANGLE} and + {\ttitlefont CWEAVE}} + \vskip 15pt + \centerline{(Version 4.2)} + \vfill} +\def\botofcontents{\vfill +\noindent +@z + + +For use on QDOS/SMSQ systems the variable |max_file_name_length| is shortened +to 42 characters, i.e. 5 characters for the device name, 36 characters +for the file name plus one character as string terminator. (Note that +(current) QDOS/SMSQ file systems have a limitation of 36 characters as +maximum length for a file name. +@x +@d max_file_name_length 1024 +@y +@d max_file_name_length 42 +@z + + +@x + cur_file_name[l]='/'; /* \UNIX/ pathname separator */ +@y + cur_file_name[l]='_'; /* QDOS/SMSQ pathname separator */ +@z + + +@x +@ We now must look at the command line arguments and set the file names +accordingly. At least one file name must be present: the \.{CWEB} +file. It may have an extension, or it may omit the extension to get |".w"| or +|".web"| added. The \TEX/ output file name is formed by replacing the \.{CWEB} +file name extension by |".tex"|, and the \CEE/ file name by replacing +the extension by |".c"|, after removing the directory name (if any). + +If there is a second file name present among the arguments, it is the +change file, again either with an extension or without one to get |".ch"|. +An omitted change file argument means that |"/dev/null"| should be used, +when no changes are desired. +@^system dependencies@> + +If there's a third file name, it will be the output file. +@y +@ We now must look at the command line arguments and set the file names +accordingly. At least one file name must be present: the \.{CWEB} +file. It may have an extension, or it may omit the extension to get |"_w"| or +|"_web"| added. The \TEX/ output file name is formed by replacing the \.{CWEB} +file name extension by |"_tex"|, and the \CEE/ file name by replacing +the extension by |"_c"|, after removing the directory name (if any). + +If there is a second file name present among the arguments, it is the +change file, again either with an extension or without one to get |"_ch"|. +An omitted change file argument means that |"NUL"| should be used, +when no changes are desired. +@^system dependencies@> + +If there's a third file name, it will be the output file. + +Because |"_"| is a directory {\em and} extension separator, \.{CWEB} will +always use the {\em full} name (i.e. with full path). Fortunately the +routine has been written to search for the last ``dot'', so the altered +version will search for the last |"_"| (including directory separators), +so we have what we want. +@z + + +@x + char *dot_pos; /* position of |'.'| in the argument */ +@y + char *dot_pos; /* position of |'_'| in the argument */ +@z + + +@x + strcpy(change_file_name,"/dev/null"); +@y + strcpy(change_file_name,"NUL"); +@z + + +@x + if (*s=='.') dot_pos=s++; + else if (*s=='/') dot_pos=NULL,name_pos=++s; + else s++; +@y + if (*s=='_') dot_pos=s++; + else if (*s=='_') dot_pos=NULL,name_pos=++s; + else s++; +@z + + +@x +@ We use all of |*argv| for the |web_file_name| if there is a |'.'| in it, +otherwise we add |".w"|. If this file can't be opened, we prepare an +|alt_web_file_name| by adding |"web"| after the dot. +The other file names come from adding other things +after the dot. We must check that there is enough room in +|web_file_name| and the other arrays for the argument. +@y +@ We use all of |*argv| for the |web_file_name| if there is a |'_'| in it, +otherwise we add |"_w"|. If this file can't be opened, we prepare an +|alt_web_file_name| by adding |"web"| after the dot. +The other file names come from adding other things +after the dot. We must check that there is enough room in +|web_file_name| and the other arrays for the argument. + +If you've read the section before carefully you'll have noticed, that +QDOS/SMSQ file names contain almost a |"_"|, so this routine will not work, +i.e. you'll {\em have} to add the |"_w"| always. Nevertheless I adapted +the routine as if it would work. +@z + + +@x +@<Make |web_file_name|...@>= +{ + if (s-*argv > max_file_name_length-5) + @<Complain about argument length@>@; + if (dot_pos==NULL) + sprintf(web_file_name,"%s.w",*argv); + else { + strcpy(web_file_name,*argv); + *dot_pos=0; /* string now ends where the dot was */ + } + sprintf(alt_web_file_name,"%s.web",*argv); + sprintf(tex_file_name,"%s.tex",name_pos); /* strip off directory name */ + sprintf(idx_file_name,"%s.idx",name_pos); + sprintf(scn_file_name,"%s.scn",name_pos); + sprintf(C_file_name,"%s.c",name_pos); + found_web=true; +} +@y +@<Make |web_file_name|...@>= +{ + if (s-*argv > max_file_name_length-5) + @<Complain about argument length@>; + if (dot_pos==NULL) + sprintf(web_file_name,"%s_w",*argv); + else { + strcpy(web_file_name,*argv); + *dot_pos=0; /* string now ends where the dot was */ + } + sprintf(alt_web_file_name,"%s_web",*argv); + sprintf(tex_file_name,"%s_tex",name_pos); /* strip off directory name */ + sprintf(idx_file_name,"%s_idx",name_pos); + sprintf(scn_file_name,"%s_scn",name_pos); + sprintf(C_file_name,"%s_c",name_pos); + found_web=true; +} +@z + + +@x +@ @<Make |change_file_name|...@>= +{ + if (strcmp(*argv,"-")!=0) { + if (s-*argv > max_file_name_length-4) + @<Complain about argument length@>@; + if (dot_pos==NULL) + sprintf(change_file_name,"%s.ch",*argv); + else strcpy(change_file_name,*argv); + } + found_change=true; +} +@y +@ @<Make |change_file_name|...@>= +{ + if (strcmp(*argv,"-")!=0) { + if (s-*argv > max_file_name_length-4) + @<Complain about argument length@>; + if (dot_pos==NULL) + sprintf(change_file_name,"%s_ch",*argv); + else strcpy(change_file_name,*argv); + found_change=true; + } +} +@z + + +@x +@ @<Override...@>= +{ + if (s-*argv > max_file_name_length-5) + @<Complain about argument length@>@; + if (dot_pos==NULL) { + sprintf(tex_file_name,"%s.tex",*argv); + sprintf(idx_file_name,"%s.idx",*argv); + sprintf(scn_file_name,"%s.scn",*argv); + sprintf(C_file_name,"%s.c",*argv); + } else { + strcpy(tex_file_name,*argv); + strcpy(C_file_name,*argv); + if (make_xrefs) { /* indexes will be generated */ + *dot_pos=0; + sprintf(idx_file_name,"%s.idx",*argv); + sprintf(scn_file_name,"%s.scn",*argv); + } + } + found_out=true; +} +@y +@ @<Override...@>= +{ + if (s-*argv > max_file_name_length-5) + @<Complain about argument length@>; + if (dot_pos==NULL) { + sprintf(tex_file_name,"%s_tex",*argv); + sprintf(idx_file_name,"%s_idx",*argv); + sprintf(scn_file_name,"%s_scn",*argv); + sprintf(C_file_name,"%s_c",*argv); + } else { + strcpy(tex_file_name,*argv); + strcpy(C_file_name,*argv); + if (make_xrefs) { /* indexes will be generated */ + *dot_pos=0; + sprintf(idx_file_name,"%s_idx",*argv); + sprintf(scn_file_name,"%s_scn",*argv); + } + } + found_out=true; +} +@z + + +@x +@ @<Print usage error message and quit@>= +{ +if (program==ctangle) + fatal( +"! Usage: ctangle [options] webfile[.w] [{changefile[.ch]|-} [outfile[.c]]]\n" + ,""); +@.Usage:@> +else fatal( +"! Usage: cweave [options] webfile[.w] [{changefile[.ch]|-} [outfile[.tex]]]\n" + ,""); +} +@y +@ @<Print usage error message and quit@>= +{ +if (program==ctangle) + fatal( +"! Usage: ctangle [options] webfile[_w] [{changefile[_ch]|-} [outfile[_c]]]\n" + ,""); +@.Usage:@> +else fatal( +"! Usage: cweave [options] webfile[_w] [{changefile[_ch]|-} [outfile[_tex]]]\n" + ,""); +} +@z |