aboutsummaryrefslogtreecommitdiffstats
path: root/mkinstalldirs
blob: ef7e16fdafe243ab5e368763bd4cda18c5872c1f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#! /bin/sh
# mkinstalldirs --- make directory hierarchy

scriptversion=2006-05-11.19

# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
# Public domain.
#
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.

nl='
'
IFS=" ""	$nl"
errstatus=0
dirmode=

usage="\
Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...

Create each directory DIR (with mode MODE, if specified), including all
leading file name components.

Report bugs to <bug-automake@gnu.org>."

# process command line arguments
while test $# -gt 0 ; do
  case $1 in
    -h | --help | --h*)         # -h for help
      echo "$usage"
      exit $?
      ;;
    -m)                         # -m PERM arg
      shift
      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
      dirmode=$1
      shift
      ;;
    --version)
      echo "$0 $scriptversion"
      exit $?
      ;;
    --)                         # stop option processing
      shift
      break
      ;;
    -*)                         # unknown option
      echo "$usage" 1>&2
      exit 1
      ;;
    *)                          # first non-opt arg
      break
      ;;
  esac
done

for file
do
  if test -d "$file"; then
    shift
  else
    break
  fi
done

case $# in
  0) exit 0 ;;
esac

# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
# mkdir -p a/c at the same time, both will detect that a is missing,
# one will create a, then the other will try to create a and die with
# a "File exists" error.  This is a problem when calling mkinstalldirs
# from a parallel make.  We use --version in the probe to restrict
# ourselves to GNU mkdir, which is thread-safe.
case $dirmode in
  '')
    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
      echo "mkdir -p -- $*"
      exec mkdir -p -- "$@"
    else
      # On NextStep and OpenStep, the `mkdir' command does not
      # recognize any option.  It will interpret all options as
      # directories to create, and then abort because `.' already
      # exists.
      test -d ./-p && rmdir ./-p
      test -d ./--version && rmdir ./--version
    fi
    ;;
  *)
    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
       test ! -d ./--version; then
      echo "mkdir -m $dirmode -p -- $*"
      exec mkdir -m "$dirmode" -p -- "$@"
    else
      # Clean up after NextStep and OpenStep mkdir.
      for d in ./-m ./-p ./--version "./$dirmode";
      do
        test -d $d && rmdir $d
      done
    fi
    ;;
esac

for file
do
  case $file in
    /*) pathcomp=/ ;;
    *)  pathcomp= ;;
  esac
  oIFS=$IFS
  IFS=/
  set fnord $file
  shift
  IFS=$oIFS

  for d
  do
    test "x$d" = x && continue

    pathcomp=$pathcomp$d
    case $pathcomp in
      -*) pathcomp=./$pathcomp ;;
    esac

    if test ! -d "$pathcomp"; then
      echo "mkdir $pathcomp"

      mkdir "$pathcomp" || lasterr=$?

      if test ! -d "$pathcomp"; then
	errstatus=$lasterr
      else
	if test ! -z "$dirmode"; then
	  echo "chmod $dirmode $pathcomp"
	  lasterr=
	  chmod "$dirmode" "$pathcomp" || lasterr=$?

	  if test ! -z "$lasterr"; then
	    errstatus=$lasterr
	  fi
	fi
      fi
    fi

    pathcomp=$pathcomp/
  done
done

exit $errstatus

# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:
pan> MODEL; // Fixme: number of gpo's should be verified static MODEL Models[] = { { 0x01, "CW1602", 2, 16, 5, 0, 1 }, { 0x02, "CW12232", 4, 40, 6, 0, 2 }, { 0xff, "Unknown", -1, -1, -1, -1, -1 } }; // **************************************** // *** hardware dependant functions *** // **************************************** static void drv_CW_write (int row, int col, unsigned char *data, int len) { char cmd[6]="\376Gxy\375"; cmd[2]=(char)col; cmd[3]=(char)row; drv_generic_serial_write (cmd, 5); drv_generic_serial_write (data, len); } static void drv_CW1602_defchar (int ascii, unsigned char *buffer) { int i; char cmd[12]="\376Nn12345678\375"; cmd[2]=(char)(ascii+1); for (i=0; i<8; i++) { cmd[3+i]=buffer[i]; } drv_generic_serial_write(cmd,12); usleep(20); // delay for cw1602 to settle the character defined! } static void drv_CW12232_defchar (int ascii, unsigned char *buffer) { int i, j; char cmd[10]="\376Nn123456\375"; cmd[2]=(char)(ascii+1); // The CW12232 uses a vertical bitmap layout, // so we have to 'rotate' the bitmap. for (i=0; i<6;i++) { cmd[3+i]=0; for (j=0; j<8;j++) { if (buffer[j] & (1<<(5-i))) { cmd[3+i]|=(1<<j); } } } drv_generic_serial_write (cmd, 10); } static int drv_CW_start (char *section) { int i; char *model; model=cfg_get(section, "Model", NULL); if (model!=NULL && *model!='\0') { for (i=0; Models[i].type!=0xff; i++) { if (strcasecmp(Models[i].name, model)==0) break; } if (Models[i].type==0xff) { error ("%s: %s.Model '%s' is unknown from %s", Name, section, model, cfg_source()); return -1; } Model=i; info ("%s: using model '%s'", Name, Models[Model].name); } else { error ("%s: no '%s.Model' entry from %s", Name, section, cfg_source()); return -1; } // open serial port if (drv_generic_serial_open(section, Name)<0) return -1; // this does not work as I'd expect it... #if 0 // read firmware version generic_serial_read(buffer,sizeof(buffer)); usleep(100000); generic_serial_write ("\3761", 2); usleep(100000); generic_serial_write ("\375", 1); usleep(100000); if (generic_serial_read(buffer,2)!=2) { info ("unable to read firmware version!"); } info ("Cwlinux Firmware %d.%d", (int)buffer[0], (int)buffer[1]); #endif // initialize global variables DROWS = Models[Model].rows; DCOLS = Models[Model].cols; XRES = Models[Model].xres; GPOS = Models[Model].gpos; Protocol = Models[Model].protocol; #if 0 drv_generic_serial_write("\376X\375",3); // Clear Display #else // for some mysterious reason, we have to sleep after // the command _and_ after the CMD_END... usleep(20); drv_generic_serial_write("\376X",2); // Clear Display usleep(20); drv_generic_serial_write("\375",1); // Command End usleep(20); #endif drv_generic_serial_write ("\376D\375", 3); // auto line wrap off drv_generic_serial_write ("\376R\375", 3); // auto scroll off drv_generic_serial_write ("\376K\375", 3); // underline cursor off drv_generic_serial_write ("\376B\375", 3); // backlight on return 0; } // **************************************** // *** plugins *** // **************************************** static void plugin_backlight (RESULT *result, RESULT *arg1) { char cmd[5]="\376A_\375"; double backlight; backlight=R2N(arg1); if (backlight<0) backlight=0; if (backlight>8) backlight=8; switch ((int)backlight) { case 0: drv_generic_serial_write ("\376F\375", 3); // backlight off break; case 8: drv_generic_serial_write ("\376B\375", 3); // backlight on break; default: cmd[2]=(char)backlight; drv_generic_serial_write (cmd, 4); // backlight level break; } SetResult(&result, R_NUMBER, &backlight); } // **************************************** // *** widget callbacks *** // **************************************** // using drv_generic_text_draw(W) // using drv_generic_text_icon_draw(W) // using drv_generic_text_bar_draw(W) // **************************************** // *** exported functions *** // **************************************** // list models int drv_CW_list (void) { int i; for (i=0; Models[i].type!=0xff; i++) { printf ("%s ", Models[i].name); } return 0; } // initialize driver & display int drv_CW_init (char *section) { WIDGET_CLASS wc; int ret; // display preferences XRES = 6; // pixel width of one char YRES = 8; // pixel height of one char CHARS = 8; // number of user-defineable characters CHAR0 = 128; // ASCII of first user-defineable char GOTO_COST = 3; // number of bytes a goto command requires // real worker functions drv_generic_text_real_write = drv_CW_write; switch (Protocol) { case 1: drv_generic_text_real_defchar = drv_CW1602_defchar; break; case 2: drv_generic_text_real_defchar = drv_CW12232_defchar; break; } // start display if ((ret=drv_CW_start (section))!=0) return ret; // initialize generic text driver if ((ret=drv_generic_text_init(section, Name))!=0) return ret; // initialize generic icon driver if ((ret=drv_generic_text_icon_init())!=0) return ret; // initialize generic bar driver if ((ret=drv_generic_text_bar_init())!=0) return ret; // add fixed chars to the bar driver drv_generic_text_bar_add_segment (0, 0, 255, 32); // ASCII 32 = blank // register text widget wc=Widget_Text; wc.draw=drv_generic_text_draw; widget_register(&wc); // register icon widget wc=Widget_Icon; wc.draw=drv_generic_text_icon_draw; widget_register(&wc); // register bar widget wc=Widget_Bar; wc.draw=drv_generic_text_bar_draw; widget_register(&wc); // register plugins AddFunction ("backlight", 1, plugin_backlight); return 0; } // close driver & display int drv_CW_quit (void) { info("%s: shutting down.", Name); drv_generic_serial_close(); drv_generic_text_quit(); return (0); } DRIVER drv_Cwlinux = { name: Name, list: drv_CW_list, init: drv_CW_init, quit: drv_CW_quit, };