148730Siwasaki%{ 248730Siwasaki/*- 348730Siwasaki * APM (Advanced Power Management) Event Dispatcher 448730Siwasaki * 548730Siwasaki * Copyright (c) 1999 Mitsuru IWASAKI <iwasaki@FreeBSD.org> 648730Siwasaki * Copyright (c) 1999 KOIE Hidetaka <koie@suri.co.jp> 748730Siwasaki * All rights reserved. 848730Siwasaki * 948730Siwasaki * Redistribution and use in source and binary forms, with or without 1048730Siwasaki * modification, are permitted provided that the following conditions 1148730Siwasaki * are met: 1248730Siwasaki * 1. Redistributions of source code must retain the above copyright 1348730Siwasaki * notice, this list of conditions and the following disclaimer. 1448730Siwasaki * 2. Redistributions in binary form must reproduce the above copyright 1548730Siwasaki * notice, this list of conditions and the following disclaimer in the 1648730Siwasaki * documentation and/or other materials provided with the distribution. 1748730Siwasaki * 1848730Siwasaki * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1948730Siwasaki * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2048730Siwasaki * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2148730Siwasaki * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2248730Siwasaki * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2348730Siwasaki * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2448730Siwasaki * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2548730Siwasaki * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2648730Siwasaki * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2748730Siwasaki * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2848730Siwasaki * SUCH DAMAGE. 2948730Siwasaki * 3050479Speter * $FreeBSD$ 3148730Siwasaki */ 3248730Siwasaki 3348730Siwasaki#include <string.h> 3448730Siwasaki#include <syslog.h> 3548730Siwasaki#include <bitstring.h> 3648730Siwasaki#include "apmd.h" 3748730Siwasaki#include "y.tab.h" 3848730Siwasaki 3948730Siwasakiint lineno; 4048730Siwasakiint first_time; 4148730Siwasaki%} 4248730Siwasaki 43250227Sjkim/* We don't need it, avoid the warning. */ 44250227Sjkim%option nounput 45250227Sjkim%option noinput 46250227Sjkim 4748730Siwasaki%s TOP 4848730Siwasaki 4948730Siwasaki%% 5048730Siwasaki 5148730Siwasaki%{ 5248730Siwasaki if (first_time) { 5348730Siwasaki BEGIN TOP; 5448730Siwasaki lineno = 1; 5548730Siwasaki first_time = 0; 5648730Siwasaki } 5748730Siwasaki%} 5848730Siwasaki 5948730Siwasaki<TOP>[ \t]+ ; 6048730Siwasaki<TOP>\n lineno++; 6148730Siwasaki<TOP>, { return COMMA; } 6248730Siwasaki<TOP>; { return SEMICOLON; } 6348730Siwasaki<TOP>#.*$ ; 6448730Siwasaki 6548730Siwasaki<TOP>apm_event { return APMEVENT; } 6648730Siwasaki 6748730Siwasaki<TOP>NOEVENT { yylval.ev = EVENT_NOEVENT; return EVENT; } 6848730Siwasaki<TOP>STANDBYREQ { yylval.ev = EVENT_STANDBYREQ; return EVENT; } 6948730Siwasaki<TOP>SUSPENDREQ { yylval.ev = EVENT_SUSPENDREQ; return EVENT; } 7048730Siwasaki<TOP>NORMRESUME { yylval.ev = EVENT_NORMRESUME; return EVENT; } 7148730Siwasaki<TOP>CRITRESUME { yylval.ev = EVENT_CRITRESUME; return EVENT; } 7248730Siwasaki<TOP>BATTERYLOW { yylval.ev = EVENT_BATTERYLOW; return EVENT; } 7348730Siwasaki<TOP>POWERSTATECHANGE { yylval.ev = EVENT_POWERSTATECHANGE; return EVENT; } 7448730Siwasaki<TOP>UPDATETIME { yylval.ev = EVENT_UPDATETIME; return EVENT; } 7548730Siwasaki<TOP>CRITSUSPEND { yylval.ev = EVENT_CRITSUSPEND; return EVENT; } 7648730Siwasaki<TOP>USERSTANDBYREQ { yylval.ev = EVENT_USERSTANDBYREQ; return EVENT; } 7748730Siwasaki<TOP>USERSUSPENDREQ { yylval.ev = EVENT_USERSUSPENDREQ; return EVENT; } 7848730Siwasaki<TOP>STANDBYRESUME { yylval.ev = EVENT_STANDBYRESUME; return EVENT; } 7948730Siwasaki<TOP>CAPABILITIESCHANGE { yylval.ev = EVENT_CAPABILITIESCHANGE; return EVENT; } 8048730Siwasaki 8176611Snsayer<TOP>apm_battery { return APMBATT; } 8276611Snsayer 8376611Snsayer<TOP>charging { return BATTCHARGE; } 8476611Snsayer<TOP>discharging { return BATTDISCHARGE; } 8576611Snsayer<TOP>[0-9]+% { 8676611Snsayer yylval.i = atoi(yytext); 8776611Snsayer return BATTPERCENT; 8876611Snsayer } 8976611Snsayer<TOP>[0-9]+[Mm] { 9076611Snsayer yylval.i = -atoi(yytext); 9176611Snsayer return BATTTIME; 9276611Snsayer } 9376611Snsayer 9448730Siwasaki<TOP>exec { return EXECCMD; } 9548730Siwasaki<TOP>reject { return REJECTCMD; } 9648730Siwasaki 9748730Siwasaki<TOP>\{ { return BEGINBLOCK; } 9848730Siwasaki<TOP>\} { return ENDBLOCK; } 9948730Siwasaki<TOP>\"[^"]+\" { 10048730Siwasaki int len = strlen(yytext) - 2; 10148730Siwasaki if ((yylval.str = (char *) malloc(len + 1)) == NULL) 10248730Siwasaki goto out; 10348730Siwasaki memcpy(yylval.str, yytext + 1, len); 10448730Siwasaki yylval.str[len] = '\0'; 10548730Siwasaki out: 10648730Siwasaki return STRING; 10748730Siwasaki } 10848730Siwasaki 10948730Siwasaki<TOP>[^"{},;#\n\t ]+ { yylval.str = strdup(yytext); return UNKNOWN; } 11048730Siwasaki%% 11148730Siwasaki 11248730Siwasakivoid 11348730Siwasakiyyerror(const char *s) 11448730Siwasaki{ 11548730Siwasaki syslog(LOG_ERR, "line %d: %s%s %s.\n", lineno, yytext, yytext?":":"", s); 11648730Siwasaki} 117