ZXNet эхоконференция «zxnet.pc»


тема: what is fawk?



от: Kirill Frolov
кому: All
дата: 15 Jul 2003
Hемедленно нажми на RESET, All!


Fidonet Awk Utility

[This is preliminary documentation and subject to change.]

Updated: September 8, 2000

Overview

FAwk does for Fidonet message bases what good old Unix awk utility
does for text files, that is allows processing of the messages
according to the C-like scripts. Existing FAwk version supports
FTS-001 (aka *.msg), Squish, JAM and Pkt message bases. It is Win32
console application which can be run on Window 9x, Windows NT and
Windows 2000 platforms.

With FAwk one can easily create various mail scanners, robots,
bouncers, carbon copiers, etc. tailored to your specific needs without
chores of real programming. Full set of message, area, string, time
and file management functions is available. In addition, you can
define custom functions to use in your scripts.

FAwk also supports for RFC822 and MIME messages, POP3/SMTP server
access and Fidonet/Internet messages gating.

Future FAwk releases may include:

· NNTP support to allow Internet news processing.

· External .DLL support to allow custom functions.

Installation

Unpack the FAwk archive and tweak the configuration file to you needs.
Also it's a good idea to check http://www.kvitek.com/fido for the most
recent version available. For editing scripts basic knowledge of C
language syntax is helpful. Some understanding of general operation of
Fidonet is assumed.

Configuration

By default, FAwk reads its configuration from the file FAwk.cfg found
in the current directory. Alternate configuration file name can be
specified using /C command line switch.

Detailed description of configuration file keywords can be found in
sample configuration file FAwk.cfg and is not included in this
document.

FAwk allows selective configuration by means of conditional Include
keywords: optional Include keyword parameters specify grep-like masks
which are checked against command line parameters and the included
file is processed only if one of the command line parameters matches
any of the specified masks.

Command line

The list of supported command line options is displayed when you run
FAwk with /? command line switch. All unrecognized command line
options and parameters can be accessed with CmdLineParam function or
used in conditional Include keywords. This allows selective
configuration using custom command line parameters.

Setting up areas

All areas which can be processed by FAwk are defined by Area keyword
or imported from Squish configuration or standard Areas.Bbs files
using SquishCfg and AreasBbs keywords respectively.

Each area has the following attributes:

· Area tag used to identify the area

· Area type: NetMail, EchoMail, GroupMail and LocalMail.
Except for the GroupMail, these attributes have no special meaning for
FAwk. GroupMail areas are special in that when the messages are copied
into them from another area, the ^aAREA: kludge specifying the
original area is automatically added.

· Base path specifies message base path.

· Base type specifies message base type. Current FAwk version
supports FTS-001 (*.msg), Squish, JAM and Pkt message bases.

· Default network address. If not specified, primary network
address is assumed. Internally it is used to make up the address
kludges in FTS-001 areas, but you can also use it in your scripts as
the origination address when sending messages.

Following is the Area keyword syntax:

Area [default address]

Example:

Area NETMAIL c:FidoMailNetMail FN
Area NETMAIL.Z77 c:FidoMailNetMail.z77 FN 77:123/6
Area PK.MADMED c:FidoMailPKMadMed SE
Area PK.SQAFIX c:FidoMailPKSqaFix JE
Area GROUPMAIL c:FidoMailGroupMail SG
Area JUNKMAIL c:FidoMailJunkMail SL

Setting up scans

Scan's are specified by the Scan keyword and describe FAwk activity
when scanning area matching a set of area masks. Following is the Scan
keyword syntax:

Scan areamask [...] { script statements }

FAwk processes scans in the order they are defined in the
configuration file. For every scan, FAwk goes through the list of
known areas looking for the ones which match any of the scan's area
masks and if match found, opens the area and executes scan's script
for every message in the area.

Example:

Scan NETMAIL {
if (IsMyMail()) ForwardToMe();
if (IsOldMail()) MoveToJunk();
}
Scan PK.* SU.* RU.* {
if (Match(Text(), "*kvitek", matchNoCase)) ForwardToMe();
}

Exit codes

FAwk returns one of the following exit codes:

· 0 -- normal exit, no errors or warnings.

· 1 -- some warnings reported.

· 2 -- some errors reported.

· -1 -- fatal error.

Script syntax

FAwk script syntax is a subset of the C programming language syntax.
Following is formal syntax definition:

statement:
expression-statement
compound-statement
selection-statement
iteration-statement
jump-statement
expression-statement:
[expression];
compound-statement:
{[statement-list]}
statement-list:
statement
statement-list statement
selection-statement:
if (expression) statement [else statement]
iteration-statement:
while (expression) statement
do statement while(expression);
for ([init-expr];[cond-expr];[loop-expr]) statement
jump-statement
break;
continue;


If the break or continue statement is encountered in the script
outside of any iteration statement, it is applied to the message scan
loop, that is break stops processing messages in the current area and
proceeds to the next area, while continue stops processing of the
current message and proceeds to the next message.

Variables

FAwk scripts support numeric and string variables. There are no
specific means to specify variable type: it's defined by last the
assigned value.

Variable names are case sensitive.

Variables and predefined constants share the same name space. This
means that you can't have variable with the same name as the
predefined constant.

Variables are not explicitly declared and are defined as soon as
they're encountered in the script. Initially variables have numeric
type and the value of zero.

Variables are subject to scope: variable defined in { } block is
visible in it and in all its nested { } blocks. Variable instance is
lost as soon as it goes out of scope.

So watch for situations like this:

for (i = 0; i < 10; i++) {
if (i == 5) str = "Fifth element";
}
StdOut("str=%d
", str); ; another instance of str!

In the example above, variable str goes out of scope before it's value
is displayed. You can fix the problem by declaring str outside of the
for loop statement, like in the following example:

str = "";
for (i = 0; i < 10; i++) {
if (i == 5) str = "Fifth element";
}
StdOut("str=%d
", str);

You could also fix the problem by replacing for loop compound
statement with the simple statement:

for (i = 0; i < 10; i++)
if (i == 5) str = "Fifth element";
StdOut("str=%d
", str);

Constants

FAwk scripts support numeric, character and string constants and set
of predefined constants.

Numeric constants

These are integers specified as decimal or hexadecimal values.

Example:

x = 1; y = 12; z = 0x0ff;

Character constants

These are integers specified as ASCII characters, hexadecimal values
or character escape sequences.

Example:

ch1 = 'A'; ch2 = 'xFF'; ch3 = '
';

Following character escape sequences are supported:

Sequence

Description

a

Bell (alert)



Backspace

f

Form feed




New line




Carriage return



Horizontal tab

v

Vertical tab

\

Backslash

''

Double quote

'

Single quote

?

Question mark


String constants

These are strings of ASCII characters or escape sequences enclosed in
double quotas.

Example:

str = "Hello, Fidonet world
";

String constants can be concatenated across the white space. For
example, the following string specifications are the same as the one
above:

str = "Hello, " "Fidonet " "world
";
str = "Hello, "
"Fidonet "
"world"
"
";

Predefined constants

Predefined constants look like variables but you can't assign value to
them.

Predefined constant names are case sensitive.

Predefined constant share the name spaces with the variables so you
can't have variable with the same name as predefined constant.

Message attribute constants (use with Attr and SetAttr):

Constant

Description

Local

Message was created locally

InTransit

Message is in-transit

Private

Private message

Read

Message was read by addressee

Sent

Message was sent to remote system

KillSent

Message will be deleted when sent

ArchiveSent

Message will be archived when sent

Hold

Message is on hold for pick-up by addressee

Crash

Message is crash

Immediate

Send message now, ignore restrictions

Direct

Send directly to destination

Gate

Send via gateway

FileRequest

Message contains file request

FileAttach

Message contains attached file(s)

TruncFile

Attached files are to be truncated when sent

KillFile

Attached files are to be deleted when sent

ReceiptReq

Return receipt requested

ConfirmReq

Confirmation receipt requested

Orphan

Message destination is unknown

Encrypt

Message text is encrypted

Compress

Message text is compressed

Escaped

Message text is seven bit ASCII

ForcePickup

Force pickup

TypeLocal

Message is for local use only (not for export)

TypeEcho

Message is for conference distribution

TypeNet

Message is direct network mail

Scanned

Message is scanned (squish)

FileUpdateReq

Message contains file update request

AuditRequest

Audit request

NoDisplay

Message may not be displayed to user

Locked

Message is locked, no editing possible

Deleted

Message is deleted


File open mode constants (use with OpenFile):

Constant

Description

modeRead

Opens the file for reading only.

modeWrite

Opens the file for writing only.

modeReadWrite

Opens the file for reading and writing.

shareExclusive

Opens the file with exclusive mode, denying other processes both read
and write access to the file. Open fails if the file has been opened
in any other mode for read or write access, even by the current
process.

shareDenyWrite

Opens the file and denies other processes write access to the file.
Open fails if the file has been opened in compatibility mode or for
write access by any other process.

shareDenyRead

Opens the file and denies other processes read access to the file.
Open fails if the file has been opened in compatibility mode or for
read access by any other process.

shareDenyNone

Opens the file without denying other processes read or write access to
the file. Open fails if the file has been opened in compatibility mode
by any other process.

modeNoInherit

Prevents the file from being inherited by child processes.

modeCreate

Create a new file. If the file exists already, it is truncated to 0
length.

modeNoTruncate

Combine this value with modeCreate. If the file being created already
exists, it is not truncated to 0 length. Thus the file is guaranteed
to open, either as a newly created file or as an existing file. This
might be useful, for example, when opening a settings file that may or
may not exist already.

typeText

Sets text mode with special processing for carriage return-linefeed
pairs.

typeBinary

Sets binary mode.


File positioning constants (use with SeekFile):

Constant

Description

seekBegin

Seek from beginning of the file.

seekCurrent

Seek from current position.

seekEnd

Seek from end of the file.


File attribute constants (use with Get/SetFileAttr):

Constant

Description

fileArchive

The file or directory is an archive file or directory

fileCompressed

The file or directory is compressed

fileDirectory

Specifies directory

fileEncrypted

The file or directory is encrypted

fileHidden

The file or directory is hidden

fileNormal

The file or directory has no other attributes set. This attribute is
valid only if used alone.

fileOffline

The data of the file is not immediately available

fileReadOnly

The file or directory is read-only

fileReparsePoint

The file has an associated reparse point

fileSparseFile

The file is a sparse file

fileSystem

The file or directory is part of, or is used exclusively by, the
operating system

fileTemporary

The file is being used for temporary storage


Log level constants (use with Log):

Constant

Description

logError

Log errors only.

logWarning

Log warnings and above.

logAction

Log actions and above.

logDetail

Log action details and above.

logDebug

Log function results, execution trace, etc.


Pattern match constants (use with Match):

Constant

Description

matchNoCase

No case sensitive match.

matchCase

Case sensitive match.


Nodelist info constants (use with GetNodeInfo):

Constant

Description

nodeLine

Return entire nodelist line for the given node

nodeStatus

Return node status (Zone, Region, Hub, Point, etc.)

nodeSystem

Return system name

nodePlace

Return system location

nodeSysop

Return sysop name

nodePhone

Return phone number

nodeFlags

Return node flags


Gating constants (use with RfcToFtn and FtnToRfc):

Constant

Description

gateMinInfo

Gate minimum info

gateMaxInfo

Gate maximum info

gateNoFileAtt

Don't gate file attachments

gateAddVia

Add FAwk via kludge


Miscellaneous constants:

Constant

Description

NULL

equals to 0

FALSE

equals to 0

TRUE

equals to 1


Functions

FAwk supports large set of predefined functions as well as user
defined functions.

Predefined functions

Most of these functions are trivial, and more detailed information on
some of them can be found in the subsequent chapters. Also,
demonstration of many predefined functions can be found in
FAwkDemo.cfg.

To get better understanding of area and message related functions you
can download Fidonet Mail Access toolkit at http://www.kvitek.com/fido
and read its documentation.

Those of you who are familiar with Microsoft Visual C++ and Win32
programming will no doubt recognize that most of string functions come
from MFC's CString class, while many file oriented functions have
direct Win32 counterparts, so feel free to use appropriate
documentation if you have access to it.

Area functions:

Function

Description

Area()

Returns area name

AreaType()

Returns area type (NetMail, EchoMail, GroupMail, LocalMail)

AreaAddr()

Returns area default network address

BaseType()

Returns area message base type (Fts,JAM,Squish,Pkt)

BasePath()

Returns area message base path

BasePathExt()

Returns area message base path extension

cMsg()

Returns number of messages in an area

SetLastReadMsg()

Set last read message unique id for the given user id

GetLastReadMsg()

Get last read message unique id for the given user id

SetNextMsg(umsg)

Set next message unique id to process in the Scan loop


Message functions:

Function

Description

FromName()

Returns message From name

FromAddr()

Returns message From address

ToName()

Returns message To name

ToAddr()

Returns message To address

Subj()

Returns message subject

Text()

Returns message text

Attr()

Returns message attributes as number

AttrString()

Returns message attributes as string

TimeWritten()

Returns time when message has been written

TimeReceived()

Returns time when message has been received

TimeProcessed()

Returns time when message has been processed

Kludge(kludge,n)

Returns n'th instance of the specified kludge.

If no kludge specified (""), returns n'th kludge in a message

iMsg()

Returns message index

nMsg()

Returns message number

uMsg()

Returns message unique identifier

SetFromName(s)

Sets message From name

SetFromAddr(s)

Sets message From address

SetToName(s)

Sets message To name

SetToAddr(s)

Sets message To address

SetSubj(s)

Sets message subject

SetText(s)

Sets message text

SetAttr(attr)

Sets message attributes as number

SetTimeWritten(t)

Sets time when message has been written

SetTimeReceived

Sets time when message has been received

SetTimeProcessed

Sets time when message has been processed

DelKludge(kl,n)

Deletes n'th instance of the specified kludge.

If no kludge specified (""), deletes n'th kludge in a message

AddKludge(kludge)

Adds specified kludge

AddEomKludge(kl)

Adds specified end-of-message kludge

CopyMsg(area)

Copies message to specified area

MoveMsg(area)

Moves message to specified area

DeleteMsg()

Deletes message

SaveMsg()

Saves message

SendMsg(...)

Sends message, parameters are: (area,from,to,subj,attr,text)


String functions:

Function

Description

GetAt(s,n)

Returns the character at a given position

SetAt(s,n,c)

Sets a character at a given position.

GetLength(s)

Returns the number of characters in a string.

Upper(s)

Converts all the characters in string to uppercase characters.

Lower(s)

Converts all the characters in string to lowercase characters.

Mid(s,n,count)

Extracts the middle part of a string.

Left(s,count)

Extracts the left part of a string.

Right(s,count)

Extracts the right part of a string.

Replace(s,s1,s2)

Replaces indicated substring with other substring.

Remove(s,ch)

Removes all instances of a given character from a string.

Insert(s,n,s1)

Inserts a substring at the given index within the string.

Delete(s,n,count)

Deletes characters at the given position from a string.

Find(s,s1,start)

Finds substring inside a string starting at given position.

FindReverse(s,ch)

Finds last occurrence of the character in the given string

Match(s,pat,case)

Performs pattern match within the string

Expand(s)

Replaces @xx@ fields in string with values of @xx@ variables

Format(fmt,...)

Formats string using printf-like format specification

Dec(str)

Converts decimal string to a numeric value

Hex(str)

Converts hexadecimal string to a numeric value

AnsiToOem(str)

Converts Ansi string to Oem

OemToAnsi(str)

Converts Oem string to Ansi

Crc32(str,crc)

Calculates CRC32 of the specified string


File functions:

Function

Description

StdOut(fmt,...)

Writes printf-like formatted string to standard output

StdErr(fmt,...)

Writes printf-like formatted string to error output

Log(lvl,fmt,...)

Writes printf-like formatted string to log file

OpenFile(fn,mode)

Opens specified file in a given mode

CloseFile(file)

Closes file

SeekFile(f,of,fm)

Seeks file to the specified position

GetFileSize(f)

Returns file size in bytes

SetFileSize(f,cb)

Sets file size (shrinks or expands the file)

IsEndOfFile(f)

Checks for end-of-file condition

ReadLine(file)

Reads a line from the file

WriteLine(file,s)

Writes a line to the file

CopyFile(fn,fn1)

Copies an existing file to a new file

MoveFile(fn,fn1)

Moves an existing file or a directory.

DeleteFile(fn)

Deletes an existing file

FileExists(fn)

Checks file existence

EnumFiles(mask)

Enumerates files given file name mask

GetFileAttr(fn)

Returns file attributes

SetFileAttr(fn,a)

Sets file attributes

CreateDir(dir)

Creates specified directory

RemoveDir(dir)

Removes specified directory


System functions:

Function

Description

GetEnv(var)

Returns specified environment variable

System(cmd)

Executes specified command

Sleep(millisec)

Suspends the execution for a specified interval

LocalTime()

Returns current local time

UTCOffset()

Returns current UTC offset in hours

FormatTime(fmt,t)

Formats time using strftime-like formatting

GetLastError()

Returns last system error

FormatError(e)

Formats system error message given system error number


SMTP functions:

Function

Description

GetSmtpHost

Returns SMTP host address

GetSmtpUser

Returns SMTP user name

OpenSmtp

Opens session on SMTP host

CloseSmtp

Closes session on SMTP host

SendSmtpMsg

Sends message to SMTP host


POP3 functions:

Function

Description

GetPop3Host

Returns POP3 host address

GetPop3User

Returns POP3 user name

OpenPop3

Opens session on POP3 host

ClosePop3

Closes session on POP3 host

GetPop3MsgCount

Returns POP3 message count

GetPop3MsgUid

Returns POP3 message unique identifier

GetPop3Msg

Returns POP3 message

DelPop3Msg

Deletes POP3 message


RFC message functions:

Function

Description

RfcFrom

Returns message From field

RfcTo

Returns message To field

RfcCc

Returns message Cc field

RfcBcc

Returns message Bcc field

RfcSubj

Returns message Subject field

RfcDate

Returns message Date field

RfcMessageId

Returns message Message-ID field

RfcReplyTo

Returns message Reply-To field

RfcReturnPath

Returns message Return-Path field

RfcText

Returns message text

RfcFile

Returns message file attachments

RfcGetField

Returns message field given its index

RfcGetTime

Returns message time converted from Date field

RfcGetUTCOffset

Returns message UTC offset converted from Date field

RfcGetName

Returns name given Internet address specification

RfcGetAddr

Returns address given Internet address specification

RfcAddField

Adds specified message field

RfcDelField

Deletes specified message field

CreateRfcMsg

Creates new message given components


Gating functions:

Function

Description

RfcToFtn

Converts Internet message to Fidonet message

FtnToRfc

Converts Fidonet message to Internet message


Miscellaneous functions:

Function

Description

FAwk()

Returns FAwk name and version string

SystemAddr()

Returns system address as specified in configuration file

SystemName()

Returns system name as specified in configuration file

SysopName()

Returns sysop name as specified in configuration file

CfgKey(key)

Checks if specified keyword is present in the config file

CfgKeyParam(kn)

Returns n'th parameter of specified keyword in the config file

CmdLineParam(prm)

Returns command line parameter matching specified mask.

CheckAddr(addr)

Checks if specified network address exists in the nodelist

GetNodeInfo(a,n)

Returns nodelist info for the given network address

Dump(var)

Dumps specified variable. If no variable specified (""), dumps

all variables visible in the current context.


User defined functions

FAwk supports user defined functions declared with the Function
keyword in the configuration file.

User defined functions are global. This means that they are available
in any script context.

User defined function names are case sensitive.

User defined function names share the same name space as the
predefined functions. This means that you can't have user defined
function with the same name as the predefined one.

User defined function parameters and variables have local scope. This
means that they are not visible outside the function definition.

User defined function result is assigned to a variable with the same
name as the function name. This also defines the type of function
result.

Example:

Function MyFunc(param1, param2) {
StdOut("MyFunc: %d %d
", param1, param2);
MyFunc = param1 + param2;
}

File FAwkFunc.cfg contains some commonly used user defined functions.

Log(logLevel, ...)

Before writing formatted string to the log file, this function
replaces all instances of
,
, and similar characters with their
escape sequences ("
", "
", etc.) and appends a plain newline
characters to the end of string so that log file integrity is a
maintained automatically.

If this function is called with logWarning or logError logging level,
it updates the FAwk's exit code to 1 or 2 respectively, unless current
exit code is higher.

Expand(str)

This function expands the fields in the given string with the values
of the variables with the same names as the field names. The field is
any number of non-space characters surrounded with @@. To specify the
@ character in the text, double it.

If variable which specifies field value is of numeric type it is
converted to equivalent string representation automatically.

This function is helpful when you need to generate a piece of text
based on the template. Automatically generated notification messages,
reports, etc. are typical applications.

Example:

@FromName@ = FromName(); @FromAddr@ = FromAddr();
@ToName@ = ToName(); @ToAddr@ = ToAddr();
@Subj@ = Subj();
@ReplyText@ = "Get the hell out of there!";
template = LoadFile("ReplyTemplate.txt");
text = Expand(template);

File ReplyTemplate.txt may contain something like this:

In reply to message from @FromName@ at @FromAddr@ to
@ToName@ at @ToAddr@ regarding "@Subj@", we have to say
the following:
@ReplyText@

Format(fmt,...) format specification

Format specification has the following form:

%[flags] [width] [.precision] type

Each field of the format specification is a single character or a
number signifying a particular format option. The simplest format
specification contains only the percent sign and a type character (for
example, %s). If a percent sign is followed by a character that has no
meaning as a format field, the character is copied to resulting
string. For example, to print a percent-sign character, use %%.

The optional fields, which appear before the type character, control
other aspects of the formatting, as follows:

type

Required character that determines whether the associated argument is
interpreted as a character, a string, or a number.

Type

Description

c

Specifies a character.

d

Signed decimal integer.

I

Signed decimal integer.

o

Unsigned octal integer.

u

Unsigned decimal integer.

x

Unsigned hexadecimal integer, using "abcdef."

X

Unsigned hexadecimal integer, using "ABCDEF."

s

Specifies a string.


flags

Optional character or characters that control justification of output
and printing of signs, blanks, decimal points, and octal and
hexadecimal prefixes. More than one flag can appear in a format
specification.

Flag

Description

-

Left align the result within the given field width.

+

Prefix the output value with a sign (+ or -) if the output value is of
a signed type.

0

If width is prefixed with 0, zeros are added until the minimum width
is reached. If 0 and - appear, the 0 is ignored. If 0 is specified
with an integer format (i, u, x, X, o, d) the 0 is ignored.

blank

Prefix the output value with a blank if the output value is signed and
positive; the blank is ignored if both the blank and + flags appear.

#

When used with the o, x, or X format, the # flag prefixes any nonzero
output value with 0, 0x, or 0X, respectively.

Ignored when used with c, d, i, u, or s.


width

The second optional field of the format specification is the width
specification. The width argument is a nonnegative decimal integer
controlling the minimum number of characters printed. If the number of
characters in the output value is less than the specified width,
blanks are added to the left or the right of the values -- depending
on whether the - flag (for left alignment) is specified -- until the
minimum width is reached. If width is prefixed with 0, zeros are added
until the minimum width is reached (not useful for left-aligned
numbers).

The width specification never causes a value to be truncated. If the
number of characters in the output value is greater than the specified
width, or if width is not given, all characters of the value are
printed (subject to the precision specification).

If the width specification is an asterisk (*), an integer argument
from the argument list supplies the value. The width argument must
precede the value being formatted in the argument list. A nonexistent
or small field width does not cause the truncation of a field; if the
result of a conversion is wider than the field width, the field
expands to contain the conversion result.

precision

The third optional field of the format specification is the precision
specification. It specifies a nonnegative decimal integer, preceded by
a period (.), which specifies the number of characters to be printed,
the number of decimal places, or the number of significant digits.
Unlike the width specification, the precision specification can cause
truncation of the output value. If precision is specified as 0 and the
value to be converted is 0, the result is no characters output.

If the precision specification is an asterisk (*), an integer argument
from the argument list supplies the value. The precision argument must
precede the value being formatted in the argument list.

The type determines the interpretation of precision and the default
when precision is omitted, as shown in the following table.

Type

Description

c

The precision has no effect.

d, i, u, o, x, X

The precision specifies the minimum number of digits to be printed. If
the number of digits in the argument is less than precision, the
output value is padded on the left with zeros. The value is not
truncated when the number of digits exceeds precision.

s

The precision specifies the maximum number of characters to be
printed. Characters in excess of precision are not printed.


FormatTime(fmt,...) format specification

Format specification consists of one or more formatting codes; the
formatting codes are preceded by a percent sign (%). Characters that
do not begin with % are copied unchanged to resulting string. The
formatting codes are listed below:


Format code

Description

%a

Abbreviated weekday name

%A

Full weekday name

%b

Abbreviated month name

%B

Full month name

%c

Date and time representation appropriate for locale

%d

Day of month as decimal number (01 - 31)

%H

Hour in 24-hour format (00 - 23)

%I

Hour in 12-hour format (01 - 12)

%j

Day of year as decimal number (001 - 366)

%m

Month as decimal number (01 - 12)

%M

Minute as decimal number (00 - 59)

%p

Current locale's A.M./P.M. indicator for 12-hour clock

%S

Second as decimal number (00 - 59)

%U

Week of year as decimal number, with Sunday as first day of week (00 -
53)

%w

Weekday as decimal number (0 - 6; Sunday is 0)

%W

Week of year as decimal number, with Monday as first day of week (00 -
53)

%x

Date representation for current locale

%X

Time representation for current locale

%y

Year without century, as decimal number (00 - 99)

%Y

Year with century, as decimal number

%z, %Z

Time-zone name or abbreviation; no characters if time zone is unknown

%%

Percent sign


As in the Format function, the # flag may prefix any formatting code.
In that case, the meaning of the format code is changed as follows.

Format code

Description

%#a, %#A, %#b, %#B, %#p, %#X, %#z, %#Z, %#%

# flag is ignored

%#c

Long date and time representation, appropriate for current locale. For
example: "Tuesday, March 14, 1995, 12:41:29"

%#x

Long date representation, appropriate to current locale. For example:
"Tuesday, March 14, 1995".

%#d, %#H, %#I, %#j, %#m, %#M, %#S, %#U, %#w, %#W, %#y, %#Y

Remove leading zeros (if any).


FormatTime function output is locale dependant. By default, FAwk uses
US English locale, but you can force it to switch to the system
default locale by specifying the UseSystemDefaultLocale keyword in the
configuration file.

SendMsg()

This function has the following parameters:

SendMsg(Area, From, To, Subj, Attr, Text)

Parameters are:

Area

Specifies an area to send the message to. This could be any area tag
defined in the Area keywords.

From

Specifies message sender name and origination address. The name goes
before address and must be separated from the address with at least
one space. If the name is not specified, default name Sysop is
assumed. Address may be followed by the domain specification.

To

Specifies message receiver name and destination address. The syntax is
the same as for the From parameter.

Subj

Specifies message subject. Most systems limit size of the message
subject to 72 characters.

Attr

Specifies message attributes. Note that most systems require Local
attribute to be set for the locally sent netmail messages to be
processed.

Text

Specifies message text. According to FTS-001 standard, message lines
are separated with
, so you might need to use Replace("
", "
")
function if you read message text from the text file.

Example:

SendMsg("NETMAIL",
SysopName() + " " + SystemAddr(),
"Pete Kvitek 2:5020/6.1@fidonet",
"FAwk notification",
Local | Private | KillSent,
"Hi there!
"
"Please check logs...
"
);

GetLastReadMsg(uid)

This function returns last read unique message id for the specified
user id or 0 if none exists. The result of this function can be passed
to SetNextMsg in order to control number of messages to scan.

Note: for JAM bases which require user name in addition to user id,
FAwk always assumes user name "FAwk".

SetLastReadMsg(uid, umsg)

This function sets last read unique message id for the specified user
id.

Note: for JAM bases which require user name in addition to user id,
FAwk always assumes user name "FAwk".

SetNextMsg(umsg)

This function sets unique message if of the next message to process in
the Scan loop. If there is no message with specified unique message
id, this function returns 0.

To prevent endless scan loops, if this function is used within the
scan block, it fails if specified unique message id is less than the
current message unique id.

Normally you use this function in conjunction with Get/SetLastReadMsg
functions to prevent scanning of already processed messages. Example:

Scan *
Begin {
; Get the last read message unique message id and
; start scanning from the next message if any
umsg = GetLastReadMsg(uid = 1);
if (!SetNextMsg(umsg + 1)) break;
}
{
; Process messages...
; Set last read message unique message id to the
; very last message scanned in the message base

if (iMsg() == cMsg() - 1) SetLastReadMsg(uid, uMsg());
}

CreateRfcMsg()

This function creates Internet message.

CreateRfcMsg(From, To, Subject, Text, Files)

Parameters are:

From

Specifies From name and address in one the following formats:

"name"

'name'

name

address

To

Specifies To name and address. Format is the same as for the From
parameter. Multiple To addresses should be separated by ';' character.

Subject

Specifies message subject. Empty string "" specifies no message
subject.

Text

Specifies message text. Empty string "" specifies no message text.

Files

Specifies files to attach to the message. Multiple files should be
separated by ';' character. Empty string "" specifies no attached
files.

Return value is Internet message handle which can be used in
subsequent calls to RfcXXX and SendSmtpMsg functions.

RfcToFtn()

This function converts Internet message to Fidonet message.

RfcToFtn(Msg, Area, Flags)

Parameters are:

Msg

Internet message handle returned by CreateRfcMsg or GetPop3Msg
functions.

Area

Fidonet area name to store the converted message to.

Flags

Specifies OR'ed gating flags:

Gating flag

Description

gateMinInfo

Suppress gating of most Internet message fields

gateMaxInfo

Gate all Internet message fields

gateNoFileAtt

Suppress gating of attached files

gateAddVia

add FAwk Via kludge to the gated message

FtnToRfc()

This function converts Fidonet message to Internet message.

FtnToRfc(Flags)

Parameters are:

Flags

Specifies OR'ed gating flags:

Gating flag

Description

gateMinInfo

Suppress gating of most Fidonet message kludges

gateMaxInfo

Gate all Fidonet message kludges

gateNoFileAtt

Suppress gating of attached files

gateAddVia

add FAwk Via kludge to the gated message


Return value is Internet message handle which can be used in
subsequent calls to RfcXXX and SendSmtpMsg functions.

Miscellaneous

Grep-like masks and patterns

FAwk's grep-like masks and Match function use a subset of grep-like
regular expressions, the following symbols are treated specially:

Symbol

Description

?

match any character

*

match zero or more characters

\n

literally match the next character

[aeiu0-9]

match a,e,i,u and 0 thru 9

[^aeiu0-9]

match anything but a,e,i,u and 0 thru 9


License

This software is provided as is, in no case Pete Kvitek or any of Pete
Kvitek's companies, may be held responsible for any damages it can
produce, directly or indirectly. If it breaks your keyboard apart, you
own both parts.

COMMERCIAL distribution and/or use of this program and the supplied
materials is PROHIBITED without written permission of Pete Kvitek.

You are a COMMERCIAL user if you make a profit from running your
FidoNet(tm) system, or if it is being run by (or for) a corporation,
government, company, foundation, or any other organization.

NONCOMMERCIAL distribution is permitted under the following terms:

· You may copy and distribute this program and supplied
materials in an UNMODIFIED form only. You may charge a distribution
fee for the physical act of transferring a copy, but no more than
necessary to recover your actual transfer costs.

· You may not incorporate all or any part of this program and
supplied materials into a package which is not completely free for all
noncommercial users and without prior written permission of Pete
Kvitek.

· The privileges to use are granted only to NONCOMMERCIAL
users, which are running FAwk as a private individuals with no
sponsors, and only if their FidoNet(tm) systems are not making (or
helping to make) a profit.

Credits

FAwk uses Fidonet Mail Access toolkit by Pete Kvitek, available with
full source code under GPL license at http://www.kvitek.com/fido.

JAM(mbp) - Copyright 1993 Joaquim Homrighausen, Andrew Milner, Mats
Birch, Mats Wallin. ALL RIGHTS RESERVED.

Squish message base. Copyright 1989,1995 by Lanius Corporation.
All rights reserved.

Distribution

Latest FAwk version is available at:

freq: FAWK 2:5020/6@fidonet
http://www.kvitek.com/fido

If you have questions or comments, please contact:

mail: pete@kvitek.com
Fido: Pete Kvitek@2:5020/6




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Железо - Описание и программирование AY-3-8910(12).
Новости - New sоft. Sрriter frом Stall. Firestarter. Tr-dоs <> Мs-dоs cорier. Excess Saмрle Editоr. Рrо tracker 3.4. Kоlоbоk Zоом 2. Белый орел: товаришь известен. Quadrax. Рrоjects.
Юмор - Ромашковый двигатель.
Четыре килобайта - Прошло 3 недели и...
Физкультурная революция - Как правильно делать зарядку.

В этот день...   25 апреля