1
2# add_cr.awk
3# converts from Unix (LF only) text files to
4# DOS (CRLF) text files
5#
6# works on both unix and dos
7# if used on unix change COPY and DEL in BEGIN section
8#
9# mawk -f add_cr.awk  [files]
10
11# with no files reads stdin writes stdout
12# otherwise the original is overwritten
13#
14# If a file of the form `@file', then arguments are read from
15# `file', one per line
16
17#
18# To add cr's to the whole distribution
19#
20# mawk -f doslist.awk packing.lis | mawk "{print $2}" > list
21# mawk -f add_cr.awk  @list
22#
23
24
25# read arguments for @file into ARGV[]
26function reset_argv(T, i, j, flag, file) #all args local
27{
28  for( i = 1 ; i < ARGC ; i++ )
29  {
30    T[i] = ARGV[i]
31    if ( T[i] ~ /^@/ ) flag = 1
32  }
33
34  if ( ! flag )  return
35
36  # need to read from a @file into ARGV
37  j = 1
38  for( i = 1 ; i < ARGC ; i++ )
39  {
40    if ( T[i] !~ /^@/ ) ARGV[j++] = T[i]
41    else
42    {
43      T[i] = substr(T[i],2)
44      # read arguments from T[i]
45      while ( (getline file < T[i]) > 0 ) ARGV[j++] = file
46    }
47  }
48  ARGC = j
49}
50
51
52BEGIN {
53  COPY = "copy"    # unix: "cp"
54  DEL = "del"      # unix: "rm"
55
56  tmpfile = ENVIRON["MAWKTMPDIR"] "MAWK.TMP"
57
58  reset_argv()
59}
60
61
62FILENAME == "-" {
63   # just write to stdout
64   printf "%s\r\n" , $0
65   next
66}
67
68FILENAME != filename {
69
70   if ( filename )
71   {
72     close(tmpfile)
73     syscmd = sprintf( "%s %s %s", COPY, tmpfile, filename )
74     system(syscmd)
75   }
76
77   filename = FILENAME
78}
79
80{ printf "%s\r\n" , $0 > tmpfile }
81
82
83END {
84  if ( filename )
85  {
86    close(tmpfile)
87    syscmd = sprintf( "%s %s %s", COPY, tmpfile, filename )
88    system(syscmd)
89    system(DEL " " tmpfile)
90  }
91}
92
93
94