From 62bb1116e471db9cfbee3e4b8da4518998a13e30 Mon Sep 17 00:00:00 2001 From: frese Date: Tue, 20 Jul 2004 14:45:35 +0000 Subject: [PATCH] - renamed packages - using srfi-9 instead of defrec-package --- examples/passwd-wrapper.scm | 2 +- scheme/expect.scm | 35 +++++++++++++++++++++-------------- scheme/packages.scm | 20 ++++++++++---------- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/examples/passwd-wrapper.scm b/examples/passwd-wrapper.scm index c015349..8cd5342 100755 --- a/examples/passwd-wrapper.scm +++ b/examples/passwd-wrapper.scm @@ -1,5 +1,5 @@ #!/bin/sh -exec scsh -lm ../scheme/packages.scm -o threads -o chat-package -o expect-package -o let-opt -e main -s "$0" "$@" +exec scsh -lm ../scheme/packages.scm -o threads -o chat -o expect -o let-opt -e main -s "$0" "$@" !# ;; TODO: diff --git a/scheme/expect.scm b/scheme/expect.scm index bd3e8c7..5f3687c 100644 --- a/scheme/expect.scm +++ b/scheme/expect.scm @@ -28,12 +28,19 @@ ;;; A task is a guy with whom we can interact. -(define-record task - process - in - out - (buf "") - (pre-match #f)) ; Everything before the current match. +(define-record-type task + (really-make-task process in out buf pre-match) + task? + (process task:process) + (in task:in) + (out task:out) + (buf task:buf set-task:buf!) + (pre-match task:pre-match set-task:pre-match!) ;; Everything before + ;; the current match. + ) + +(define (make-task process in out) + (really-make-task process in out "" #f)) (define (tsend task fmt . args) (apply format (task:out task) fmt args)) @@ -98,14 +105,14 @@ ; ;; BUF := some of BUF + all of STR. ; ((<= str-size max-size) ; (let ((i (- total-size max-size))) -; (set-task:pre-match (string-append (task:pre-match task) +; (set-task:pre-match! (string-append (task:pre-match task) ; (substring buf 0 i))) ; (string-append (substring buf i buf-size) ; str))) ; ; ;; BUF := some of STR. ; (else (let ((i (- str-size max-size))) -; (set-task:pre-match (string-append (task:pre-match task) +; (set-task:pre-match! (string-append (task:pre-match task) ; buf ; (substring str 0 i))) ; (substring str i str-size)))))) @@ -116,9 +123,9 @@ ;;; - Put everything in BUFFER *after* the match into (TASK:BUF TASK). (define (set-prematch task buffer m) - (set-task:pre-match task (substring buffer 0 (match:start m))) - (set-task:buf task - (substring buffer (match:end m) (string-length buffer)))) + (set-task:pre-match! task (substring buffer 0 (match:start m))) + (set-task:buf! task + (substring buffer (match:end m) (string-length buffer)))) ;;; Slurp in data from port ivec[i] and add it to the task's buffer. @@ -136,7 +143,7 @@ (read-string/partial 256 port)))) (and s (let ((newbuf (string-append (task:buf task) s))) - (set-task:buf task newbuf) + (set-task:buf! task newbuf) s)))) ;;; A ( ...) task-clause becomes the following chunk of code @@ -172,8 +179,8 @@ (cond ((do-input task) => (lambda (i) (try-match-clauses (task:buf task) i do-next))) (else - (set-task:pre-match task (task:buf task)) - (set-task:buf task "") + (set-task:pre-match! task (task:buf task)) + (set-task:buf! task "") (monitor task #f) ; Signal EOF (do-eof) (vector-set! ivec i #f))) diff --git a/scheme/packages.scm b/scheme/packages.scm index fd959b7..8677c0b 100644 --- a/scheme/packages.scm +++ b/scheme/packages.scm @@ -10,13 +10,13 @@ (access signals) ; for ERROR (files expect-syntax)) -(define-structure expect-package - (export task? make-task copy-task - task:process set-task:process modify-task:process - task:in set-task:in modify-task:in - task:out set-task:out modify-task:out - task:buf set-task:buf modify-task:buf - task:pre-match set-task:pre-match modify-task:pre-match +(define-structure expect + (export task? make-task + task:process + task:in + task:out + task:buf set-task:buf! + task:pre-match set-task:pre-match! port->monitor @@ -27,19 +27,19 @@ (for-syntax (open expect-syntax-support scheme)) (open scsh formats structure-refs - receiving defrec-package scheme srfi-13) + receiving srfi-9 scheme srfi-13) (access signals) ; for ERROR (files expect)) -(define-structure chat-package +(define-structure chat (export chat-abort chat-timeout chat-monitor port->chat-logger file->chat-logger (look-for :syntax) (chat :syntax) send send/cr) - (open scsh expect-package fluids scheme) + (open scsh expect fluids scheme) (files chat))