[[project @ 2000-11-27 21:27:04 by ghouston] ghouston**20001127212705 Ignore-this: 5f21fad9d5994cbe51fc76aabce3c72f * USAGE, README: updated. * lib/list-lib.scm (for-each): define * lib/list-lib.scm: define module (scsh lib list-lib). comment out procedures which are already compatibly defined in Guile (cons*, make-list, list-copy, last-pair, append!, reverse!) (for-each): define, since it's supposed to be here but was missing. * lib/ccp.scm: file removed. doesn't seem to be required by anything else or documented. * scsh-condition.scm: define module (scsh scsh-condition). * condition.scm: file removed. * stringcoll.scm: define module (scsh stringcoll). * enumconst.scm: file deleted: defines a couple of macros which are not used or exported. * fluid.scm: define module (scsh fluid). * sighandlers.scm: define module (scsh sighandlers). (maybe-define-signal): export each symbol that's defined. * weak.scm: define module (scsh weak). * population.scm: define module (scsh population). * procobj.scm: define module (scsh procobj). * syscalls.scm: define module (scsh syscalls). (close-fdes, seek): removed: now guile primitives. * fname.scm: define module (scsh fname). * scsh-version.scm: define module (scsh scsh-version). * init.scm: load new modules. ] rmfile ./condition.scm rmfile ./enumconst.scm rmfile ./lib/ccp.scm hunk ./ChangeLog 1 +2000-11-27 Gary Houston + + * USAGE, README: updated. + + * lib/list-lib.scm (for-each): define + + * lib/list-lib.scm: define module (scsh lib list-lib). + comment out procedures which are already compatibly defined in + Guile (cons*, make-list, list-copy, last-pair, append!, + reverse!) + (for-each): define, since it's supposed to be here but was missing. + + * lib/ccp.scm: file removed. doesn't seem to be required by + anything else or documented. + + * scsh-condition.scm: define module (scsh scsh-condition). + + * condition.scm: file removed. + + * stringcoll.scm: define module (scsh stringcoll). + + * enumconst.scm: file deleted: defines a couple of macros which + are not used or exported. + + * fluid.scm: define module (scsh fluid). + * sighandlers.scm: define module (scsh sighandlers). + (maybe-define-signal): export each symbol that's + defined. + * weak.scm: define module (scsh weak). + * population.scm: define module (scsh population). + * procobj.scm: define module (scsh procobj). + * syscalls.scm: define module (scsh syscalls). + (close-fdes, seek): removed: now guile primitives. + * fname.scm: define module (scsh fname). + * scsh-version.scm: define module (scsh scsh-version). + * init.scm: load new modules. + hunk ./INCOMPAT 22 +interrupt-set, set-enabled-interrupts, with-interrupts, +with-enabled-interrupts*, %set-unix-signal-handler and +%unix-signal-handler have not been implemented. Within a +with-enabled-interrupts form, all interrupts are disabled. + hunk ./INCOMPAT 41 -set-enabled-interrupts and with-interrupts have not been -implemented. Within a with-enabled-interrupts form, all interrupts are -disabled. - hunk ./README 1 -This is an incomplete port of the scheme shell, scsh 0.5.2 to Guile. +This is an incomplete port of the scheme shell, scsh 0.5.2, to Guile. +This is not a release of guile-scsh, but was presumably obtained at +some random time from the CVS archive. hunk ./README 9 -Prerequisites for guile-scsh: +This version of guile-scsh requires: hunk ./README 11 -1) guile-core, version 1.4. The CVS version of guile-scsh should also -work with the CVS version of guile-core: please report it as a bug if -it doesn't. +1) guile-core dated 27 November 2000 or later. Version 1.4 is too old. hunk ./USAGE 1 -The entire guile-scsh package can be loaded into a running Guile -interpreter with: - -(load-from-path "scsh/init") - -Warning: this will take a while and will clobber various Guile -definitions. - -It's probably more useful to import parts of scsh individually using -the Guile module system, but this is not yet possible for all parts of -the library. - -The remainder of this file lists the modules and the exported symbols -for each. The modules don't necessarily correspond with scsh -structures, since the Guile module system requires a correspondence -between module names and files. It was considered desirable to leave -the scsh file layouts relatively intact, to simplify ungrading to -newer versions of scsh. - -This list was generated with help from the make-module-list script. - hunk ./USAGE 31 -;; "delete" is incompatile with guile primitive. +;; "delete" is incompatile with guile primitive. it's also incompatible with +;; delete from (scsh lib list-lib). hunk ./USAGE 118 -;; exports nothing, but installs a read macro for #< hunk ./USAGE 120 +(scsh scsh-version) +(scsh-major-version scsh-minor-version scsh-version-string) + +(scsh weak) +(make-weak-pointer weak-pointer-ref weak-pointer?) + +(scsh population) +(make-population add-to-population! population-reduce population->list walk-population) + +(scsh sighandlers) +;; also exports signal/alrm, interrupt/alrm etc. +(signal->interrupt with-enabled-interrupts enabled-interrupts set-enabled-interrupts set-interrupt-handler interrupt-handler) + +(scsh procobj) +(proc:pid proc? pid->proc autoreap-policy reap-zombies new-child-proc wait/poll wait/stopped-children wait wait-any wait-process-group) + +(scsh syscalls) +;; replaces pipe, sleep +(%exec %%fork cwd user-gid user-effective-gid set-gid user-supplementary-gids user-uid user-effective-uid set-uid user-login-name pid parent-pid set-process-group become-session-leader set-umask process-times cpu-ticks/sec set-file-mode set-file-owner set-file-group read-symlink delete-directory set-file-times file-info file-info:type file-info:gid file-info:inode file-info:atime file-info:mtime file-info:ctime file-info:mode file-info:nlinks file-info:uid file-info:size sync-file sync-file-system seek/set seek/delta seek/end tell pipe signal-process signal-process-group pause-until-interrupt user-info user-info:name user-info:uid user-info:gid user-info:home-dir user-info:shell name->user-info uid->user-info ->uid ->username %homedir group-info group-info:name group-info:gid group-info:members ->gid ->groupname directory-files env->alist alist->env fdes-flags set-fdes-flags fdes-status set-fdes-status open/read open/write open/read+write open/non-blocking open/append open/exclusive open/create open/truncate open/no-control-tty fdflags/close-on-exec sleep sleep-until system-name define-errno-syscall) + +(scsh fname) +(file-name-as-directory file-name-directory? file-name-non-directory? directory-as-file-name ensure-file-name-is-nondirectory file-name-absolute? file-name-directory file-name-nondirectory split-file-name path-list->file-name file-name-extension file-name-sans-extension replace-extension parse-file-name expand-file-name simplify-file-name resolve-tilde-file-name resolve-file-name absolute-file-name home-dir home-file) + +(scsh fluid) +(make-fluid set-fluid! fluid let-fluid) + +(scsh stringcoll) +(make-string-collector collect-string! clear-string-collector! string-collector->string) + +(scsh scsh-condition) +(errno-error with-errno-handler* with-errno-handler) + +(scsh lib list-lib) +;; replaces: +;; map map-in-order for-each member assoc iota list-index +;; delete delete! +(xcons list-tabulate list-copy circular-list iota proper-list? circular-list? dotted-list? not-pair? null-list? list= first second third fourth fifth sixth seventh eighth ninth tenth car+cdr take drop take-right drop-right take! drop-right! take-while drop-while take-while! split-at split-at! span break span! break! last length+ append-reverse append-reverse! concatenate concatenate! zip unzip1 unzip2 unzip3 unzip4 unzip5 count unfold unfold-right fold unfold pair-fold reduce fold-right unfold-right pair-fold-right reduce-right append-map append-map! map! pair-for-each filter-map map-in-order filter partition remove filter! partition! remove! find find-tail any every list-index delete delete! delete-duplicates delete-duplicates! alist-cons alist-copy alist-delete alist-delete! lset<= lset= lset-adjoin lset-union lset-union! lset-intersection lset-intersection! lset-difference lset-difference! lset-xor lset-xor! lset-diff+intersection lset-diff+intersection! map for-each member assoc) hunk ./fluid.scm 3 +(define-module (scsh fluid)) +(export make-fluid set-fluid! fluid let-fluid) + hunk ./fname.scm 14 +(define-module (scsh fname) + :use-module (scsh lib string-lib) + :use-module (scsh let-opt) + :use-module (scsh receive) + :use-module (scsh syscalls)) + +(export file-name-as-directory + file-name-directory? + file-name-non-directory? + directory-as-file-name + ensure-file-name-is-nondirectory + file-name-absolute? + file-name-directory + file-name-nondirectory + split-file-name + path-list->file-name + file-name-extension + file-name-sans-extension + replace-extension + parse-file-name + expand-file-name + simplify-file-name + resolve-tilde-file-name + resolve-file-name + absolute-file-name + home-dir + home-file) + hunk ./init.scm 46 -) + (scsh scsh-version) + (scsh weak) + (scsh population) + + ;; also exports signal/alrm, interrupt/alrm etc. + (scsh sighandlers) hunk ./init.scm 53 -(load-from-path "scsh/scsh-version.scm") -(load-from-path "scsh/fname.scm") -(load-from-path "scsh/enumconst.scm") -(load-from-path "scsh/weak.scm") -(load-from-path "scsh/fluid.scm") -(load-from-path "scsh/population.scm") -(load-from-path "scsh/stringcoll.scm") -(load-from-path "scsh/condition.scm") -(load-from-path "scsh/scsh-condition.scm") + (scsh procobj) hunk ./init.scm 55 -(load-from-path "scsh/lib/ccp.scm") -(load-from-path "scsh/lib/list-lib.scm") + ;; replaces pipe, sleep + (scsh syscalls) + + (scsh fname) + (scsh fluid) + (scsh stringcoll) + (scsh scsh-condition) + + ;; replaces: + ;; map map-in-order for-each member assoc iota list-index + ;; delete delete! + (scsh lib list-lib) +) hunk ./init.scm 69 -(load-from-path "scsh/syscalls.scm") hunk ./init.scm 80 -(load-from-path "scsh/sighandlers.scm") -(load-from-path "scsh/procobj.scm") hunk ./lib/list-lib.scm 211 +(define-module (scsh lib list-lib) + :use-module (scsh receive) + :use-module (scsh utilities) + :use-module (scsh let-opt) +) +(export xcons + ; cons* make-list + list-tabulate list-copy circular-list iota + proper-list? circular-list? dotted-list? not-pair? null-list? list= + first second third fourth fifth sixth seventh eighth ninth tenth + car+cdr + take drop + take-right drop-right + take! drop-right! + take-while drop-while take-while! + split-at split-at! + span break + span! break! + last ; last-pair + length+ + ; append! reverse! + append-reverse append-reverse! concatenate + concatenate! + zip unzip1 unzip2 unzip3 unzip4 unzip5 + count + unfold unfold-right + fold unfold pair-fold reduce + fold-right unfold-right pair-fold-right reduce-right + append-map append-map! map! pair-for-each filter-map map-in-order + filter partition remove + filter! partition! remove! + find find-tail any every list-index + delete delete! delete-duplicates delete-duplicates! + alist-cons alist-copy + alist-delete alist-delete! + + lset<= lset= lset-adjoin + lset-union lset-union! + lset-intersection lset-intersection! + lset-difference lset-difference! + lset-xor lset-xor! + lset-diff+intersection lset-diff+intersection! + + map for-each member assoc +) hunk ./lib/list-lib.scm 272 -(define (make-list len . maybe-elt) - (check-arg (lambda (n) (and (integer? n) (>= n 0))) len make-list) - (let ((elt (cond ((null? maybe-elt) #f) ; Default value - ((null? (cdr maybe-elt)) (car maybe-elt)) - (else (error "Too many arguments to MAKE-LIST" - (cons len maybe-elt)))))) - (do ((i len (- i 1)) - (ans '() (cons elt ans))) - ((<= i 0) ans)))) +;; already defined in Guile +; (define (make-list len . maybe-elt) +; (check-arg (lambda (n) (and (integer? n) (>= n 0))) len make-list) +; (let ((elt (cond ((null? maybe-elt) #f) ; Default value +; ((null? (cdr maybe-elt)) (car maybe-elt)) +; (else (error "Too many arguments to MAKE-LIST" +; (cons len maybe-elt)))))) +; (do ((i len (- i 1)) +; (ans '() (cons elt ans))) +; ((<= i 0) ans)))) hunk ./lib/list-lib.scm 301 -(define (cons* first . rest) - (let recur ((x first) (rest rest)) - (if (pair? rest) - (cons x (recur (car rest) (cdr rest))) - x))) +;; already defined in Guile +; (define (cons* first . rest) +; (let recur ((x first) (rest rest)) +; (if (pair? rest) +; (cons x (recur (car rest) (cdr rest))) +; x))) hunk ./lib/list-lib.scm 310 -(define (list-copy lis) - (let recur ((lis lis)) - (if (pair? lis) - (cons (car lis) (recur (cdr lis))) - lis))) +;(define (list-copy lis) +; (let recur ((lis lis)) +; (if (pair? lis) +; (cons (car lis) (recur (cdr lis))) +; lis))) hunk ./lib/list-lib.scm 643 -(define (last-pair lis) - (check-arg pair? lis last-pair) - (let lp ((lis lis)) - (let ((tail (cdr lis))) - (if (pair? tail) (lp tail) lis)))) +;; already defined in Guile. +; (define (last-pair lis) +; (check-arg pair? lis last-pair) +; (let lp ((lis lis)) +; (let ((tail (cdr lis))) +; (if (pair? tail) (lp tail) lis)))) hunk ./lib/list-lib.scm 698 -(define (append! . lists) - ;; First, scan through lists looking for a non-empty one. - (let lp ((lists lists) (prev '())) - (if (not (pair? lists)) prev - (let ((first (car lists)) - (rest (cdr lists))) - (if (not (pair? first)) (lp rest first) +;; already defined in Guile. +; (define (append! . lists) +; ;; First, scan through lists looking for a non-empty one. +; (let lp ((lists lists) (prev '())) +; (if (not (pair? lists)) prev +; (let ((first (car lists)) +; (rest (cdr lists))) +; (if (not (pair? first)) (lp rest first) hunk ./lib/list-lib.scm 707 - ;; Now, do the splicing. - (let lp2 ((tail-cons (last-pair first)) - (rest rest)) - (if (pair? rest) - (let ((next (car rest)) - (rest (cdr rest))) - (set-cdr! tail-cons next) - (lp2 (if (pair? next) (last-pair next) tail-cons) - rest)) - first))))))) +; ;; Now, do the splicing. +; (let lp2 ((tail-cons (last-pair first)) +; (rest rest)) +; (if (pair? rest) +; (let ((next (car rest)) +; (rest (cdr rest))) +; (set-cdr! tail-cons next) +; (lp2 (if (pair? next) (last-pair next) tail-cons) +; rest)) +; first))))))) hunk ./lib/list-lib.scm 994 +;; guile: above it's claimed that for-each is redefined in this file +;; to handle lists of unequal lengths. this is from scsh rts/base.scm +;; and hacked. +(define (for-each proc first . rest) + (let loop ((first first) (rest rest)) + (if (not (or (null? first) + (any null? rest))) + (begin (apply proc (cons (car first) (map car rest))) + (loop (cdr first) (map cdr rest)))))) + hunk ./lib/list-lib.scm 1042 +;; Guile's version can't be used because it doesn't allow list of unequal +;; length. hunk ./lib/list-lib.scm 1054 - ;; Fast path. - (let recur ((lis lis1)) - (if (null-list? lis) lis + ;; Fast path. + (let recur ((lis lis1)) + (if (null-list? lis) lis hunk ./lib/list-lib.scm 1475 -(define (reverse! lis) - (let lp ((lis lis) (ans '())) - (if (null-list? lis) ans - (let ((tail (cdr lis))) - (set-cdr! lis ans) - (lp tail lis))))) +;; already defined in Guile. +; (define (reverse! lis) +; (let lp ((lis lis) (ans '())) +; (if (null-list? lis) ans +; (let ((tail (cdr lis))) +; (set-cdr! lis ans) +; (lp tail lis))))) hunk ./make-module-list 45 - here))) - -;; comments - + here + scsh-version + weak + population + sighandlers + procobj + syscalls + fname + fluid + stringcoll + scsh-condition + lib/list-lib))) hunk ./population.scm 3 - - +(define-module (scsh population) + :use-module (scsh weak) +) +(export make-population add-to-population! population-reduce + population->list walk-population) hunk ./procobj.scm 12 +(define-module (scsh procobj) + :use-module (scsh defrec) + :use-module (scsh population) + :use-module (scsh utilities) + :use-module (scsh let-opt) + :use-module (scsh sighandlers) + :use-module (scsh weak) +) +(export proc:pid proc? pid->proc autoreap-policy reap-zombies + new-child-proc wait/poll wait/stopped-children wait wait-any + wait-process-group) + hunk ./scsh-condition.scm 4 +(define-module (scsh scsh-condition) + :use-module (scsh alt-syntax) +) +(export errno-error with-errno-handler*) +(export-syntax with-errno-handler) + hunk ./scsh-version.scm 1 +(define-module (scsh scsh-version)) +(export scsh-major-version scsh-minor-version scsh-version-string) + hunk ./sighandlers.scm 35 +(define-module (scsh sighandlers) + :use-module (scsh define-foreign-syntax) +) +;; additional exports are generated below. +(export signal->interrupt + ;; interrupt-set + with-enabled-interrupts + ;; with-enabled-interrupts* + enabled-interrupts + set-enabled-interrupts + + set-interrupt-handler + interrupt-handler + +;; %set-unix-signal-handler +;; %unix-signal-handler + +) + hunk ./sighandlers.scm 97 - (let ((build-name (lambda (prefix signame) - (string->symbol - (string-append prefix - (string-downcase - (substring (symbol->string signame) - 3))))))) - `(if (defined? ',name) - (begin - (define ,(build-name "interrupt/" name) - ,name) - (define ,(build-name "signal/" name) - ,name))))) + (let* ((build-name (lambda (prefix signame) + (string->symbol + (string-append prefix + (string-downcase + (substring (symbol->string signame) + 3)))))) + (interrupt-name (build-name "interrupt/" name)) + (signal-name (build-name "signal/" name))) + `(cond ((defined? ',name) + (define ,interrupt-name ,name) + (export ,interrupt-name) + (define ,signal-name ,name) + (export ,signal-name))))) hunk ./sighandlers.scm 146 -(undefine maybe-define-signal) - hunk ./stringcoll.scm 30 +(define-module (scsh stringcoll) + :use-module (scsh defrec) +) +(export make-string-collector collect-string! clear-string-collector! + string-collector->string) + hunk ./syscalls.scm 8 +(define-module (scsh syscalls) + :use-module (scsh define-foreign-syntax) + :use-module (scsh receive) + :use-module (scsh utilities) + :use-module (scsh let-opt) + :use-module (scsh fname) + :use-module (scsh defrec) + :use-module (scsh procobj) +) +(export %exec %%fork cwd user-gid user-effective-gid set-gid + user-supplementary-gids user-uid user-effective-uid set-uid + user-login-name pid parent-pid set-process-group + become-session-leader set-umask process-times cpu-ticks/sec + set-file-mode set-file-owner set-file-group read-symlink + delete-directory set-file-times + file-info file-info:type file-info:gid file-info:inode + file-info:atime file-info:mtime file-info:ctime file-info:mode + file-info:nlinks file-info:uid file-info:size + sync-file sync-file-system + seek/set seek/delta seek/end tell pipe + signal-process signal-process-group pause-until-interrupt + user-info user-info:name user-info:uid user-info:gid + user-info:home-dir user-info:shell + name->user-info uid->user-info ->uid ->username %homedir + group-info group-info:name group-info:gid group-info:members + ->gid ->groupname + directory-files + env->alist alist->env + fdes-flags set-fdes-flags fdes-status set-fdes-status + open/read open/write open/read+write open/non-blocking + open/append open/exclusive open/create open/truncate + open/no-control-tty fdflags/close-on-exec + sleep sleep-until + system-name) + +(export-syntax define-errno-syscall) + hunk ./syscalls.scm 558 -(define close-fdes close) - hunk ./syscalls.scm 586 -(define (seek fd/port offset . maybe-whence) - (let ((whence (:optional maybe-whence seek/set))) - (fseek fd/port offset whence))) +;(define (seek fd/port offset . maybe-whence) +; (let ((whence (:optional maybe-whence seek/set))) +; (receive (err cursor) +; ((if (integer? fd/port) %fd-seek/errno %fdport-seek/errno) +; fd/port +; offset +; whence) +; (if err (errno-error err seek fd/port offset whence) cursor)))) hunk ./syscalls.scm 632 -(set! pipe (lambda () - (let ((rv (guile-pipe))) - (values (car rv) (cdr rv))))) +(define pipe (lambda () + (let ((rv (guile-pipe))) + (values (car rv) (cdr rv))))) hunk ./weak.scm 3 +(define-module (scsh weak)) +(export make-weak-pointer weak-pointer-ref weak-pointer?) +