+/*----- General scanner handling ------------------------------------------*/
+
+/* --- @scan@ --- *
+ *
+ * Arguments: @scanner *sc@ = pointer to main scanner context
+ *
+ * Returns: Character read, or end-of-file.
+ *
+ * Use: Scans a character from a source of characters.
+ */
+
+extern int scan(scanner */*sc*/);
+
+/* --- @unscan@ --- *
+ *
+ * Arguments: @scanner *sc@ = pointer to main scanner context
+ * @int ch@ = character to unscan
+ *
+ * Returns: ---
+ *
+ * Use: Scans a character from a source of characters.
+ */
+
+extern void unscan(scanner */*sc*/, int /*ch*/);
+
+/* --- @scan_push@ --- *
+ *
+ * Arguments: @scanner *sc@ = pointer to main scanner context
+ * @scansrc *ss@ = souorce to push
+ *
+ * Returns: ---
+ *
+ * Use: Pushes a scanner source onto the front of the queue.
+ */
+
+extern void scan_push(scanner */*sc*/, scansrc */*ss*/);
+
+/* --- @scan_add@ --- *
+ *
+ * Arguments: @scanner *sc@ = pointer to main scanner context
+ * @scansrc *ss@ = souorce to push
+ *
+ * Returns: ---
+ *
+ * Use: Adds a scanner source onto the end of the queue.
+ */
+
+extern void scan_add(scanner */*sc*/, scansrc */*ss*/);
+
+/* --- @scan_create@ --- *
+ *
+ * Arguments: @scanner *sc@ = scanner context to initialize
+ *
+ * Returns: ---
+ *
+ * Use: Initializes a scanner block ready for use.
+ */
+
+extern void scan_create(scanner */*sc*/);
+
+/* --- @scan_destroy@ --- *
+ *
+ * Arguments: @scanner *sc@ = pointer to scanner context
+ *
+ * Returns: ---
+ *
+ * Use: Destroys a scanner and all the sources attached to it.
+ */