]> code.delx.au - gnu-emacs/blobdiff - lisp/org/ob-C.el
Fix more copyright year for Org files.
[gnu-emacs] / lisp / org / ob-C.el
index 086079f9082ae3f29ff242e636eb9ef886bd1123..4f33fc45310300a7f71d97ec4668def7e3265fca 100644 (file)
@@ -1,11 +1,10 @@
 ;;; ob-C.el --- org-babel functions for C and similar languages
 
-;; Copyright (C) 2010  Free Software Foundation, Inc.
+;; Copyright (C) 2010-2012  Free Software Foundation, Inc.
 
 ;; Author: Eric Schulte
 ;; Keywords: literate programming, reproducible research
 ;; Homepage: http://orgmode.org
-;; Version: 7.01
 
 ;; This file is part of GNU Emacs.
 
 ;;; Code:
 (require 'ob)
 (require 'ob-eval)
-(require 'org)
 (require 'cc-mode)
 
 (declare-function org-entry-get "org"
                  (pom property &optional inherit literal-nil))
 
-(add-to-list 'org-babel-tangle-lang-exts '("c++" . "cpp"))
+
+(defvar org-babel-tangle-lang-exts)
+(add-to-list 'org-babel-tangle-lang-exts '("C++" . "cpp"))
 
 (defvar org-babel-default-header-args:C '())
 
@@ -47,8 +47,8 @@
   "Command used to compile a C source code file into an
   executable.")
 
-(defvar org-babel-c++-compiler "g++"
-  "Command used to compile a c++ source code file into an
+(defvar org-babel-C++-compiler "g++"
+  "Command used to compile a C++ source code file into an
   executable.")
 
 (defvar org-babel-c-variant nil
@@ -57,39 +57,38 @@ is currently being evaluated.")
 
 (defun org-babel-execute:cpp (body params)
   "Execute BODY according to PARAMS.  This function calls
-`org-babel-execute:C'."
-  (org-babel-execute:C body params))
+`org-babel-execute:C++'."
+  (org-babel-execute:C++ body params))
 
-(defun org-babel-execute:c++ (body params)
+(defun org-babel-execute:C++ (body params)
     "Execute a block of C++ code with org-babel.  This function is
 called by `org-babel-execute-src-block'."
   (let ((org-babel-c-variant 'cpp)) (org-babel-C-execute body params)))
 
-(defun org-babel-expand-body:c++ (body params &optional processed-params)
+(defun org-babel-expand-body:C++ (body params)
   "Expand a block of C++ code with org-babel according to it's
 header arguments (calls `org-babel-C-expand')."
-  (let ((org-babel-c-variant 'cpp)) (org-babel-C-expand body params processed-params)))
+  (let ((org-babel-c-variant 'cpp)) (org-babel-C-expand body params)))
 
 (defun org-babel-execute:C (body params)
   "Execute a block of C code with org-babel.  This function is
 called by `org-babel-execute-src-block'."
   (let ((org-babel-c-variant 'c)) (org-babel-C-execute body params)))
 
-(defun org-babel-expand-body:c (body params &optional processed-params)
+(defun org-babel-expand-body:c (body params)
   "Expand a block of C code with org-babel according to it's
 header arguments (calls `org-babel-C-expand')."
-  (let ((org-babel-c-variant 'c)) (org-babel-C-expand body params processed-params)))
+  (let ((org-babel-c-variant 'c)) (org-babel-C-expand body params)))
 
 (defun org-babel-C-execute (body params)
   "This function should only be called by `org-babel-execute:C'
-or `org-babel-execute:c++'."
-  (let* ((processed-params (org-babel-process-params params))
-         (tmp-src-file (make-temp-file "org-babel-C-src" nil
-                                       (cond
-                                       ((equal org-babel-c-variant 'c) ".c")
-                                       ((equal org-babel-c-variant 'cpp) ".cpp"))))
-         (tmp-bin-file (make-temp-file "org-babel-C-bin"))
-         (tmp-out-file (make-temp-file "org-babel-C-out"))
+or `org-babel-execute:C++'."
+  (let* ((tmp-src-file (org-babel-temp-file
+                       "C-src-"
+                       (cond
+                        ((equal org-babel-c-variant 'c) ".c")
+                        ((equal org-babel-c-variant 'cpp) ".cpp"))))
+         (tmp-bin-file (org-babel-temp-file "C-bin-"))
          (cmdline (cdr (assoc :cmdline params)))
          (flags (cdr (assoc :flags params)))
          (full-body (org-babel-C-expand body params))
@@ -100,38 +99,36 @@ or `org-babel-execute:c++'."
             (format "%s -o %s %s %s"
                     (cond
                      ((equal org-babel-c-variant 'c) org-babel-C-compiler)
-                     ((equal org-babel-c-variant 'cpp) org-babel-c++-compiler))
-                    tmp-bin-file
+                     ((equal org-babel-c-variant 'cpp) org-babel-C++-compiler))
+                    (org-babel-process-file-name tmp-bin-file)
                     (mapconcat 'identity
                                (if (listp flags) flags (list flags)) " ")
-                    tmp-src-file) ""))))
+                    (org-babel-process-file-name tmp-src-file)) ""))))
     ((lambda (results)
        (org-babel-reassemble-table
-       (if (member "vector" (nth 2 processed-params))
-           (let ((tmp-file (make-temp-file "ob-c")))
+       (if (member "vector" (cdr (assoc :result-params params)))
+           (let ((tmp-file (org-babel-temp-file "c-")))
              (with-temp-file tmp-file (insert results))
              (org-babel-import-elisp-from-file tmp-file))
          (org-babel-read results))
        (org-babel-pick-name
-        (nth 4 processed-params) (cdr (assoc :colnames params)))
+        (cdr (assoc :colname-names params)) (cdr (assoc :colnames params)))
        (org-babel-pick-name
-        (nth 5 processed-params) (cdr (assoc :rownames params)))))
+        (cdr (assoc :rowname-names params)) (cdr (assoc :rownames params)))))
      (org-babel-trim
        (org-babel-eval
        (concat tmp-bin-file (if cmdline (concat " " cmdline) "")) "")))))
 
-(defun org-babel-C-expand (body params &optional processed-params)
+(defun org-babel-C-expand (body params)
   "Expand a block of C or C++ code with org-babel according to
 it's header arguments."
-  (let ((vars (nth 1 (or processed-params
-                          (org-babel-process-params params))))
+  (let ((vars (mapcar #'cdr (org-babel-get-header params :var)))
         (main-p (not (string= (cdr (assoc :main params)) "no")))
         (includes (or (cdr (assoc :includes params))
                       (org-babel-read (org-entry-get nil "includes" t))))
         (defines (org-babel-read
                   (or (cdr (assoc :defines params))
                       (org-babel-read (org-entry-get nil "defines" t))))))
-    (org-babel-trim
      (mapconcat 'identity
                (list
                 ;; includes
@@ -147,11 +144,11 @@ it's header arguments."
                 ;; body
                 (if main-p
                     (org-babel-C-ensure-main-wrap body)
-                  body) "\n") "\n"))))
+                  body) "\n") "\n")))
 
 (defun org-babel-C-ensure-main-wrap (body)
   "Wrap body in a \"main\" function call if none exists."
-  (if (string-match "^[ \t]*[intvod]+[ \t]*main[ \t]*(.*)" body)
+  (if (string-match "^[ \t]*[intvod]+[ \t\n\r]*main[ \t]*(.*)" body)
       body
     (format "int main() {\n%s\n}\n" body)))
 
@@ -182,7 +179,7 @@ of the same value."
       (format "int %S = %S;" var val))
      ((floatp val)
       (format "double %S = %S;" var val))
-     ((or (characterp val))
+     ((or (integerp val))
       (format "char %S = '%S';" var val))
      ((stringp val)
       (format "char %S[%d] = \"%s\";"
@@ -193,6 +190,6 @@ of the same value."
 
 (provide 'ob-C)
 
-;; arch-tag: 8f49e462-54e3-417b-9a8d-423864893b37
+
 
 ;;; ob-C.el ends here