diff options
Diffstat (limited to 'tcllib/modules/base64/yencode.pcx')
-rw-r--r-- | tcllib/modules/base64/yencode.pcx | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tcllib/modules/base64/yencode.pcx b/tcllib/modules/base64/yencode.pcx new file mode 100644 index 0000000..e38499f --- /dev/null +++ b/tcllib/modules/base64/yencode.pcx @@ -0,0 +1,78 @@ +# -*- tcl -*- yencode.pcx +# Syntax of the commands provided by package yencode. +# +# For use by TclDevKit's static syntax checker. +# See http://www.activestate.com/solutions/tcl/ +# See http://aspn.activestate.com/ASPN/docs/Tcl_Dev_Kit/4.0/Checker.html#pcx_api +# for the documentation describing the format of the code contained in this file +# + +package require pcx +pcx::register yencode +pcx::tcldep 1.1.1 needs tcl 8.2 + +namespace eval ::yencode {} + +# Using the indirections below looks to be quite pointless, given that +# they simply substitute the commands for others. I am doing this for +# two reasons. + +# First, the rules coming after become self-commenting, i.e. a +# maintainer can immediately see what an argument is supposed to be, +# instead of having to search elsewhere (like the documentation and +# implementation). In this manner our definitions here are a type of +# semantic markup. + +# The second reason is that while we have no special checks now we +# cannot be sure if such will (have to) be added in the future. With +# all checking routed through our definitions we now already have the +# basic infrastructure (i.e. hooks) in place in which we can easily +# add any new checks by simply redefining the relevant command, and +# all the rules update on their own. Mostly. This should cover 90% of +# the cases. Sometimes new checks will require to create deeper +# distinctions between different calls of the same thing. For such we +# may have to update the rules as well, to provide the necessary +# information to the checker. + +interp alias {} yencode::checkMode {} checkWord ; # +interp alias {} yencode::checkDstFilename {} checkWord ; # +interp alias {} yencode::checkData {} checkWord ; # +interp alias {} yencode::checkLineLength {} checkInt ; # +interp alias {} yencode::checkCrc32Flag {} checkBoolean ; # + +#pcx::message FOO {... text ...} type +#pcx::scan <VERSION> <NAME> <RULE> + +pcx::check 1.1.1 std ::yencode::ydecode \ + {checkConstrained {checkSimpleArgs 1 -1 { + {checkSwitches 1 { + {-filename {checkSetConstraint hasfilename checkFileName}} + -- + } {checkConstraint { + {hasfilename {checkSimpleArgs 0 0 {}}} + {!hasfilename {checkSimpleArgs 1 1 { + yencode::checkData + }}} + } {}}} + }}} +# TODO: Limit -mode to a octal numbers (file permissions) +pcx::check 1.1.1 std ::yencode::yencode \ + {checkConstrained {checkSimpleArgs 1 -1 { + {checkSwitches 1 { + {-crc32 yencode::checkCrc32Flag} + {-line yencode::checkLineLength} + {-mode yencode::checkMode} + {-name yencode::checkDstFilename} + {-filename {checkSetConstraint hasfilename checkFileName}} + -- + } {checkConstraint { + {hasfilename {checkSimpleArgs 0 0 {}}} + {!hasfilename {checkSimpleArgs 1 1 { + yencode::checkData + }}} + } {}}} + }}} + +# Initialization via pcx::init. +# Use a ::yencode::init procedure for non-standard initialization. +pcx::complete |