Вход/Регистрация
Разработка приложений в среде Linux. Второе издание
вернуться

Троан Эрик В.

Шрифт:

143: regFlags |= REG_ICASE;

144: /* преобразование шаблона в нижний регистр; этого можно не делать,

145: если мы игнорируем регистр в регулярном выражении, однако позволяет

146: функции strstr правильно обработать -i */

147: chptr = alloca(strlen(pattern) + 1);

148: strcpy(chptr, pattern);

149: pattern = chptr;

150:

151: while (*chptr) {

152: if (isalpha(*chptr)) *chptr = tolower(*chptr);

153: chptr++;

154: }

155: }

156:

157:

158: switch (mode) {

159: case MODE_EXTENDED:

160: regFlags |= REG_EXTENDED;

161: case MODE_REGEXP:

162: if ((rc = regcomp(&regPattern, pattern, regFlags))) {

163: do_regerror(rc, &regPattern);

164: return 1;

165: }

166: finalPattern = &regPattern;

167: break;

168:

169: case MODE_FIXED:

170: finalPattern = pattern;

171: break;

172: }

173:

174: if (!*files) {

175: rc = scanFile(stdin, mode, finalPattern, ignoreCase, NULL,

176: &maxCount);

177: } else if (!files[1]) {

178: /* эта часть обрабатывается отдельно, поскольку имя файла

179: выводить не нужно */

180: if (!(f = fopen(*files, "r"))) {

181: perror(*files);

182: rc = 1;

183: } else {

184: rc = scanFile(f, mode, finalPattern, ignoreCase, NULL,

185: &maxCount);

186: fclose(f);

187: }

188: } else {

189: rc = 0;

190:

191: while (*files) {

192: if (!(f = fopen(*files, "r"))) {

193: perror(*files);

194: rc = 1;

195: } else {

196: rc |= scanFile(f, mode, finalPattern, ignoreCase,

197: *files, &maxCount);

198: fclose(f);

199: }

200: files++;

201: if (!maxCount) break;

202: }

203: }

204:

205: return rc;

206: }

Глава 24

Управление терминалами с помощью библиотеки S-Lang

С помощью библиотеки S-Lang, написанной Джоном Дэвисом (John Е. Davis), можно осуществлять доступ к терминалам на среднем уровне. Все действия, связанные с управлением терминалами на низком уровне, осуществляются посредством набора подпрограмм, предлагающих прямой доступ к видеотерминалам и автоматически управляющих прокруткой и цветами. Несмотря на незначительную прямую поддержку окон и отсутствие в S-Lang каких-либо элементов управления, для таких задач эта библиотека предлагает удобную основу [167] .

167

Один из авторов этой книги разработал набор инструментальных средств

newt
для управления окнами на высоком уровне на основе S-Lang; этот набор входит в состав большинства распространяемых дистрибутивов Linux.

Библиотеку S-Lang можно использовать и для работы в DOS, что делает ее привлекательной для создания приложений, которые будут выполняться на платформах Unix и DOS.

Возможности управления терминалами с помощью библиотеки S-Lang можно разделить на две категории. Во-первых, библиотека предлагает набор функций для управляемого считывания нажатий клавиш из терминала. Во-вторых, она содержит набор подпрограмм для полноэкранного вывода на терминал. Многие возможности терминалов будут недоступными для программистов, однако функциональными возможностями каждого терминала можно будет воспользоваться [168] . В этой главе вы узнаете о том, каким образом можно использовать библиотеку S-Lang применительно ко всем этим функциональным возможностям, а в конце главы вам будет предложен пример программы для закрепления материала.

168

Как это описано в базе данных

terminfo
.

24.1. Обработка ввода

Подсистема управления вводом на терминалах является одной из наименее доступных подсистем в мире Unix.

Широко распространенными подсистемами являются BSD sgtty, System termio, a также POSIX termios. За работу по управлению входными данными в библиотеке S-Lang отвечают несколько функций, предназначенных специально для того, чтобы сделать обработку данных, поступающих с клавиатуры, более простой и доступной.

Чтобы написать программу для посимвольного чтения из терминала и вывода каждого символа в отдельной строке потребуется несложный код.

  • Читать дальше
  • 1
  • ...
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: