open.c revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
8a77240a809197c92c0736c431b4b88947a7bac1Christian Maeder/***********************************************************************
8a77240a809197c92c0736c431b4b88947a7bac1Christian Maeder* This software is part of the ast package *
adea2e45fa61f1097aadc490a0aeaf4831b729ccChristian Maeder* Copyright (c) 2003-2011 AT&T Intellectual Property *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* and is licensed under the *
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder* Eclipse Public License, Version 1.0 *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* by AT&T Intellectual Property *
2eeec5240b424984e3ee26296da1eeab6c6d739eChristian Maeder* A copy of the License is available at *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* http://www.eclipse.org/org/documents/epl-v10.html *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder* Information and Software Systems Research *
0095c7efbddd0ffeed6aaf8ec015346be161d819Till Mossakowski* AT&T Research *
adea2e45fa61f1097aadc490a0aeaf4831b729ccChristian Maeder* Florham Park NJ *
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski* Glenn Fowler <gsf@research.att.com> *
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder***********************************************************************/
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder * open a handle to the jcl deck
d9a45a35cd696085be1a038b2cc67bee6819c574cmaederjclopen(Jcl_t* scope, const char* file, unsigned long flags, Jcldisc_t* disc)
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski if (!(vm = vmopen(Vmdcheap, Vmbest, 0)) || !(vs = vmopen(Vmdcheap, Vmbest, 0)))
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder jcl->redirect[i] = dup(redirect[i].fd);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder if (!(jcl->cp = sfstropen()) || !(jcl->rp = sfstropen()) || !(jcl->tp = sfstropen()) || !(jcl->vp = sfstropen()) || !(jcl->xp = sfstropen()))
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder jcl->dddisc.link = offsetof(Jcldd_t, link);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder jcl->dddisc.key = offsetof(Jcldd_t, name);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder jcl->outdirdisc.link = offsetof(Jcldir_t, link);
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski jcl->outdirdisc.key = offsetof(Jcldir_t, name);
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski jcl->outputdisc.link = offsetof(Jcloutput_t, link);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder jcl->outputdisc.key = offsetof(Jcloutput_t, name);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder jcl->rcdisc.link = offsetof(Rc_t, link);
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski jcl->symdisc.link = offsetof(Jclsym_t, link);
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maeder jcl->symdisc.key = offsetof(Jclsym_t, name);
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maeder if (!(jcl->dd = dtnew(jcl->vm, &jcl->dddisc, Dtoset)) ||
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski !(jcl->ds = dtnew(jcl->vm, &jcl->dddisc, Dtoset)) ||
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski !(jcl->outdir = dtnew(jcl->vm, &jcl->outdirdisc, Dtoset)) ||
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski !(jcl->output = dtnew(jcl->vm, &jcl->outputdisc, Dtoset)) ||
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder !(jcl->rcs = dtnew(jcl->vm, &jcl->rcdisc, Dtoset)) ||
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski !(jcl->syms = dtnew(jcl->vm, &jcl->symdisc, Dtoset)) ||
4ef5e33657aae95850b7e6941f67ac1fb73cd13fChristian Maeder !(jcl->ss = dtnew(jcl->vm, &jcl->symdisc, Dtoset)) ||
4ef5e33657aae95850b7e6941f67ac1fb73cd13fChristian Maeder !(jcl->step->syms = dtnew(jcl->vm, &jcl->symdisc, Dtoset)))
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder if (!file || streq(file, "-") || streq(file, "/dev/stdin"))
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski else if (!(file = jclfind(jcl, file, flags, 2, &sp)))
a98fd29a06e80e447af26d898044c23497adbc73Mihai Codescu if (!jcl->name && error_info.line && jcl->disc->errorf)
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski (*jcl->disc->errorf)(NiL, jcl->disc, 1, "no JOB or PROC statement");
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * close jcl handle
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder dup2(jcl->redirect[i], redirect[i].fd);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder if (!jcl->scope && jclstats(sfstdout, jcl->flags, jcl->disc))
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maeder * push an include file
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maederjclpush(register Jcl_t* jcl, Sfio_t* sp, const char* file, long line)
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder if (!(ip = vmnewof(jcl->vm, 0, Include_t, 1, file ? strlen(file) : 0)))
4d7d53fec6b551333c79da6ae3b8ca2af0a741abChristian Maeder error_info.file = file ? strcpy(ip->path, file) : (char*)0;
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder if (file && (jcl->flags & JCL_LISTSCRIPTS))
cd6e5706893519bfcf24539afa252fcbed5097ddKlaus Luettich * pop the top include file
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * >0 some includes left
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * 0 last include popped
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * <0 no includes left