summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/base64/yencode.pcx
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/base64/yencode.pcx')
-rw-r--r--tcllib/modules/base64/yencode.pcx78
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