added first real command line interface
This commit is contained in:
		
							parent
							
								
									3d90d39924
								
							
						
					
					
						commit
						e45e9a6b0d
					
				|  | @ -46,22 +46,83 @@ For testing load this at a scsh prompt | |||
| ;;; real work in static-heap-linker1 | ||||
| ;;; argl is a list of the command line arguments | ||||
|     (define (static-heap-linker argl) | ||||
|       (cond ((not (= (length argl) 3)) | ||||
| 	     (format #t  | ||||
| 		     "usage: ~a input-image-file output-executible-file"  | ||||
| 		     (car argl)) | ||||
| 	     (exit 1))) | ||||
| 	(let ((temp-dir-arg #f) | ||||
| 	      (cc-command-arg #f) | ||||
| 	      (ld-flags-arg #f) | ||||
| 	      (libraries-arg #f) | ||||
| 	      (input-image-arg #f) | ||||
| 	      (output-executible-arg #f)) | ||||
| 	  (let loop ((args (cdr argl))) | ||||
| 	    (cond ((null? args) | ||||
| 		   (cond ((not output-executible-arg) | ||||
| 			  (display "error: -o is a required argument")  | ||||
| 			  (newline) | ||||
| 			  (usage (car argl))) | ||||
| 			 ((not input-image-arg) | ||||
| 			  (display "error: -i is a required argument")  | ||||
| 			  (newline) | ||||
| 			  (usage (car argl))))) | ||||
| 		  ((equal? (car args) "-o") | ||||
| 		   (cond ((not (null? (cdr args))) | ||||
| 			  (set! output-executible-arg (cadr args)) | ||||
| 			  (loop (cddr args))) | ||||
| 			 (else  | ||||
| 			  (display "error: -o requires argument") (newline) | ||||
| 			  (usage (car argl))))) | ||||
| 		  ((equal? (car args) "-i") | ||||
| 		   (cond ((not (null? (cdr args))) | ||||
| 			  (set! input-executible-arg (cadr args)) | ||||
| 			  (loop (cddr args))) | ||||
| 			 (else  | ||||
| 			  (display "error: -i requires argument") (newline) | ||||
| 			  (usage (car argl))))) | ||||
| 		  ((equal? (car args) "--temp") | ||||
| 		   (cond ((not (null? (cdr args))) | ||||
| 			  (set! temp-dir-arg (cadr args)) | ||||
| 			  (loop (cddr args))) | ||||
| 			 (else  | ||||
| 			  (display "error: --temp requires argument") (newline) | ||||
| 			  (usage (car argl))))) | ||||
| 		  ((equal? (car args) "--cc") | ||||
| 		   (cond ((not (null? (cdr args))) | ||||
| 			  (set! cc-command-arg (cadr args)) | ||||
| 			  (loop (cddr args))) | ||||
| 			 (else  | ||||
| 			  (display "error: --cc requires argument") (newline) | ||||
| 			  (usage (car argl))))) | ||||
| 		  ((equal? (car args) "--ld") | ||||
| 		   (cond ((not (null? (cdr args))) | ||||
| 			  (set! ld-command-arg (cadr args)) | ||||
| 			  (loop (cddr args))) | ||||
| 			 (else  | ||||
| 			  (display "error: --ld requires argument") (newline) | ||||
| 			  (usage (car argl))))) | ||||
| 		  ((equal? (car args) "--libs") | ||||
| 		   (cond ((not (null? (cdr args))) | ||||
| 			  (set! libraries-arg (cadr args)) | ||||
| 			  (loop (cddr args))) | ||||
| 			 (else  | ||||
| 			  (display "error: --libs requires argument") (newline) | ||||
| 			  (usage (car argl))))) | ||||
| 		  (else | ||||
| 		   (format #t "error: unknown argument ~a" (car args))  | ||||
| 		   (newline) | ||||
| 		   (usage (car argl))))) | ||||
| 	  (let ((temp-dir		; place for intermediate .c .o files | ||||
| 	     (or (getenv "TMPDIR")  | ||||
| 		 (or temp-dir-arg | ||||
| 		     (getenv "TMPDIR")  | ||||
| 		     "@TMPDIR@")) | ||||
| 		(cc-command		; command to compile a .c file | ||||
| 	     (or (getenv "CC") | ||||
| 		 (or cc-command-arg | ||||
| 		     (getenv "CC") | ||||
| 		     "@CC@ @CFLAGS@")) | ||||
| 		(ld-flags		; flags needed to link executible | ||||
| 	     (or (getenv "LDFLAGS") | ||||
| 		 (or ld-flags-arg | ||||
| 		     (getenv "LDFLAGS") | ||||
| 		     "@LDFLAGS@")) | ||||
| 		(libraries		; linbraries need to link executible | ||||
| 	     (or (getenv "LIBS") | ||||
| 		 (or libraries-arg | ||||
| 		     (getenv "LIBS") | ||||
| 		     "@LIBS@")) | ||||
| 		(input-image		; the input scheme image file | ||||
| 		 (cadr argl)) | ||||
|  | @ -69,7 +130,18 @@ For testing load this at a scsh prompt | |||
| 		 (caddr argl))) | ||||
| 	    (static-heap-linker1 input-image temp-dir output-executible | ||||
| 				 cc-command ld-flags libraries) | ||||
| 	(exit 0))) | ||||
| 	    (exit 0)))) | ||||
|      | ||||
|     (define (usage program-name) | ||||
|       (format #t  | ||||
| 	      (string-append | ||||
| 	       "usage: ~a -i image -o executible~%"  | ||||
| 	       "          [--temp directory]~%" | ||||
| 	       "          [--cc command]~%" | ||||
| 	       "          [--ld command]~%" | ||||
| 	       "          [--libs libraries]~%") | ||||
| 	      program-name) | ||||
|       (exit 1)) | ||||
| 	 | ||||
| ;;; heap structure | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 bdc
						bdc