Spooler print to file program

90 views
Skip to first unread message

CLIF

unread,
Nov 20, 2009, 4:10:55 PM11/20/09
to jBASE
jBASE 3.4
Windows 2000

I created a very simple spooler program that receives input from the
spooler and writes it to a directory file. I create the FORMQUEUE
with:

SP-CREATE F1 PROG PRINT.PROG

Here is the code for PRINT.PROG

001 INCLUDE JBC.h
002 ID = "1.TXT"
003 DIRECTORY = 'D:\tmp'
004 OPENSEQ DIRECTORY:"\":ID TO S.FILE ELSE NULL
005 *
006 INPUT LINE,1
007 LINE := CHAR(13)
008 WRITESEQ LINE ON S.FILE ELSE NULL
009 WEOFSEQ S.FILE ELSE NULL
010 CLOSESEQ S.FILE

Here is the error I'm getting from the spooler when I do a:
SP-ASSIGN F1
LIST PART (P

jBASE despooler for FORMQUEUE F1
Started at 12:55:32 20 NOV 2009
Starting Job 13 to PRINT.PROG
** Error [ STDIN ] **
Error getting input from STDIN , errno = 0
Line 6 , Source PRINT.PROG.b
Completed

I know the PRINT.PROG program runs and can write to the file because
if I change line 6 to LINE="TEST", it does write the string TEST to
1.txt. It looks like it might be a permissions issue but this is on
development system which has admin rights on everything. Anyone have a
direction they can point me in?

Daniel Klein

unread,
Nov 23, 2009, 1:19:36 PM11/23/09
to jb...@googlegroups.com
Use http://jbase.markmail.org and search for 'spooler'. The answer is there.

Dan
> --
> Please read the posting guidelines at: http://groups.google.com/group/jBASE/web/Posting%20Guidelines
>
> IMPORTANT: Type T24: at the start of the subject line for questions specific to Globus/T24
>
> To post, send email to jB...@googlegroups.com
> To unsubscribe, send email to jBASE-un...@googlegroups.com
> For more options, visit this group at http://groups.google.com/group/jBASE?hl=en

pat

unread,
Nov 23, 2009, 3:20:52 PM11/23/09
to jBASE
Been there.

Reviewed 45 pages of output, still can't find the answer

Any more clues ?

Pat.

On 23 Nov, 18:19, Daniel Klein <danielklei...@gmail.com> wrote:
> Usehttp://jbase.markmail.organd search for 'spooler'. The answer is there.

Simon Verona

unread,
Nov 23, 2009, 3:47:18 PM11/23/09
to jb...@googlegroups.com
If it's always the same text file then simply create a printer in
windows that spools to a file...

When creating the printer in windows choose a generic text print
driver, create a new port and type on the full path to the file you
want to create...

Hope this helps...

---------------------------------
Simon Verona
Director
Dealer Management Services Ltd

Sent from my iPhone

CLIF

unread,
Nov 23, 2009, 3:56:49 PM11/23/09
to jBASE
Thanks Simon, but no I don't want to use the same text file, I only
used the same text file for simplicity in explaining my problem.

On Nov 23, 12:47 pm, Simon Verona <si...@dmservices.co.uk> wrote:
> If it's always the same text file then simply create a printer in  
> windows that spools to a file...
>
> When creating the printer in windows choose a generic text print  
> driver, create a new port and type on the full path to the file you  
> want to create...
>
> Hope this helps...
>
> ---------------------------------
> Simon Verona
> Director
> Dealer Management Services Ltd
>
> Sent from my iPhone
>
> On 23 Nov 2009, at 20:20, pat <pat...@gmail.com> wrote:
>
> > Been there.
>
> > Reviewed 45 pages of output, still can't find the answer
>
> > Any more clues ?
>
> > Pat.
>
> > On 23 Nov, 18:19, Daniel Klein <danielklei...@gmail.com> wrote:
> >> Usehttp://jbase.markmail.organdsearch for 'spooler'. The answer is  

CLIF

unread,
Nov 23, 2009, 1:42:45 PM11/23/09
to jBASE
Thanks Dan I did search through previous postings for "Spooler" before
I posted. I didn't see anything that addresses this particular error.
What I did find was how to create a program that the spooler will pass
input to which I can successfully do based on what I wrote below. The
problem seems to be with my program receiving the input via the INPUT
or IN statement documented below.

On Nov 23, 10:19 am, Daniel Klein <danielklei...@gmail.com> wrote:
> Usehttp://jbase.markmail.organd search for 'spooler'. The answer is there.

Simon Verona

unread,
Nov 23, 2009, 6:03:02 PM11/23/09
to jb...@googlegroups.com
Are the prints being generated from a basic prog?  or could this be anything ?

We do this by SP-ASSIGNing to a Held spool device, and then picking up the spooler file from the spooler after closing the print job.   If this would work for you I can find some sample code..

Simon

Daniel Klein

unread,
Nov 23, 2009, 9:15:16 PM11/23/09
to jb...@googlegroups.com
Clif,

The error is occurring because you are not telling the program when to
stop accepting INPUT from the spooler.

Take a look at the code in this thread...
http://markmail.org/message/ksjcvsdbvdkokpzw

The important part of the program is where it checks SYSTEM(14) to see
if the spooler is finished.

The part where it builds up and executes the 'cmd' variable is
probably not pertinent for your needs, but the rest of the program can
be used to redirect spooler output to a file by capturing the spooled
output a line-at-a-time and writing it to a sequential file.

Does that help?

Dan

"Rome was not built in a day, but then I was not on that job!"

CLIF

unread,
Nov 23, 2009, 9:36:35 PM11/23/09
to jBASE
Yes Dan thats what I thought also but I tried an INPUT,1 and had the
same result.

On Nov 23, 6:15 pm, Daniel Klein <danielklei...@gmail.com> wrote:
> Clif,
>
> The error is occurring because you are not telling the program when to
> stop accepting INPUT from the spooler.
>
> Take a look at the code in this thread...http://markmail.org/message/ksjcvsdbvdkokpzw
>
> The important part of the program is where it checks SYSTEM(14) to see
> if the spooler is finished.
>
> The part where it builds up and executes the 'cmd' variable is
> probably not pertinent for your needs, but the rest of the program can
> be used to redirect spooler output to a file by capturing the spooled
> output a line-at-a-time and writing it to a sequential file.
>
> Does that help?
>
> Dan
>
> "Rome was not built in a day, but then I was not on that job!"
>
> On Mon, Nov 23, 2009 at 1:42 PM, CLIF <jb...@bristol.us.com> wrote:
> > Thanks Dan I did search through previous postings for "Spooler" before
> > I posted. I didn't see anything that addresses this particular error.
> > What I did find was how to create a program that the spooler will pass
> > input to which I can successfully do based on what I wrote below. The
> > problem seems to be with my program receiving the input via the INPUT
> > or IN statement documented below.
>
> > On Nov 23, 10:19 am, Daniel Klein <danielklei...@gmail.com> wrote:
> >> Usehttp://jbase.markmail.organdsearch for 'spooler'. The answer is there.

Daniel Klein

unread,
Nov 24, 2009, 8:36:13 AM11/24/09
to jb...@googlegroups.com
The spooler is not going to set idle (why does this word come up all
the time ;-) ) waiting for your program to terminate

It doesn't matter HOW you do your input. The code first needs to check
to see if there is anything TO input. Otherwise you will get that
error.

If you are still having problems, post the code.

Dan

CLIF

unread,
Nov 24, 2009, 3:22:21 PM11/24/09
to jBASE
Thanks Dan, adding the check for system(14) didn't work either but it
did point me to where the problem is, although I still don't know how
to correct it. The problem is system(14) always returns a zero which
tells me the spooler is not outputting to the stdout which is why
nothing gets put in the stdin.
> >> >> Usehttp://jbase.markmail.organdsearchfor 'spooler'. The answer is there.

Daniel Klein

unread,
Nov 24, 2009, 5:31:10 PM11/24/09
to jb...@googlegroups.com
Post your code and I will show you the error of your ways ;-)

Dan

CLIF

unread,
Nov 24, 2009, 7:29:03 PM11/24/09
to jBASE
Thanks Dan, here is the code:

001 PROMPT ''
002 ID = "1.TXT"
003 DIRECTORY = 'D:\tmp'
004 OPENSEQ DIRECTORY:"\":ID TO S.FILE ELSE NULL
005 *
006 LOOP
007 NUMCHARS = SYSTEM(14)
008 WHILE NUMCHARS DO
009 INPUT LINE,NUMCHARS
010 LINE := CHAR(13)
011 WRITESEQ LINE ON S.FILE ELSE NULL
012 REPEAT
013 WEOFSEQ S.FILE ELSE NULL
014 CLOSESEQ S.FILE

Daniel Klein

unread,
Nov 24, 2009, 8:30:14 PM11/24/09
to jb...@googlegroups.com
I'll also need to see a 'jdiag.out' file (jdiag -vL) and the
'%JBCRELEASEDIR%\config\Config_EMULATE' file. Include them as
attachments.

My guess as to why it is not working is that 'openseq_creates = true'
is not in your 'Config_EMULATE' file under the appropriate emulation
section. So what is happening is it gets to the OPENSEQ line and
doesn't create the sequential file cos it can't. This theory can be
proved correct by placing a null file called '1.TXT' in the 'D:\tmp'
directory which will satisfy the existence of the sequential file so
that the OPENSEQ line has something to 'open'.

Therefore, the 'fix' is to add 'openseq_creates = true' to your
'Config_EMULATE' file and then there will be no need for the null
'1.TXT' file to pre-exist.

Dan

CLIF

unread,
Nov 24, 2009, 8:33:34 PM11/24/09
to jBASE
I have openseq_creates = true. The seq file does get created just that
nothing ever gets written into it.

Daniel Klein

unread,
Nov 25, 2009, 6:56:07 AM11/25/09
to jb...@googlegroups.com
How is the queue defined?

What is the name of the program?

Does 'D:\tmp' exist?

What are the permissions on 'D:\tmp'?

What does 'jshow program_name' display?

What is the 'SP-ASSIGN' statement being used?

What is the command being issued to direct output to the spooler? Does
the command actually produce 'output'?

Are you still getting the error?

Where is the 'jdiag.out' and 'Config_EMULATE' file?

If you want further assistasdnce then you need to volunteer more information.

Dan

Daniel Klein

unread,
Nov 25, 2009, 7:05:25 AM11/25/09
to jb...@googlegroups.com
Btw, I just plugged your program in to my system and it worked perfectly.

Dan

CLIF

unread,
Nov 25, 2009, 9:35:55 AM11/25/09
to jBASE
Thanks that it least tells me ther is somthing wrong with my spooler
or jBASE setup. I'm sure its not a permissions issue at least with the
d:\temp directory. I'm creating the formqueue like:
SP-CREATE F1 PROG PRINT.PROG

I do an SP-ASSIGN F1
then

LIST PART (P

Below is my jdiag

System Information
==================

System : Win2K CLIF2000 5.0 i386
OS Release : Win 2000 Build 2195 Service Pack 4
NT User : cbristol
jBASE User (JBCLOGNAME) : Not Set
Time : Wed Nov 25 06:26:55 2009

Licence details
===============

jPML: jENTERPRISE licensed for 3 users, expires Wed Dec 30 16:00:00
2009
Product: jENTERPRISE licensed for 3 Users; expires Wed Dec 30 16:00:00
2009

License Details: jENTERPRISE^0^3^1262217600

Environment
===========

JBCWINCONNECT : 'C:\JBASE30\tmp\jPML_0'
JBCPORTNO : '0'
Connect Port : '0'
JBCRELEASEDIR : 'C:\JBASE30'
JBCGLOBALDIR : 'C:\JBASE30'
HOME : 'D:\IMS50'
JEDIFILEPATH (Default) : 'D:\IMS50;.'
JEDIFILENAME_MD : 'D:\IMS50\MD]D'
JEDIFILENAME_SYSTEM : 'D:\IMS50\SYSTEM'
JBCBASETMP (Default) : 'C:\JBASE30\tmp\jBASEWORK'
JBCNOINTERNAL : Not Set
JEDI_NOSHMEM : Not Set
RELEASE Information : Major 3.4 , Minor 1 , Patch 5
Spooler dir (Default) : 'C:\JBASE30\jspooler'
Spooler directory 'C:\JBASE30\jspooler' OK
JBCEMULATE : 'JBASE'
Emulation Config file 'C:\JBASE30\config\Config_EMULATE' OK
JBCEMULATE Label 'JBASE' found in file 'C:\JBASE30\config
\Config_EMULATE'

Executable search Path: D:\ims50;C:\WINNT\system32;C:\WINNT;D:\DSPATCH
\TASK8.001\REL\BIN;D:\IMS50\REL\BIN;C:\JBASE30\BIN;C:
\JBASE30\INCLUDE;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:
\JBASE30\bin;C:\JBASE30\jDP\bin;C:\Program Files\Symantec\pcAnywhere
\;C:\Program Files\QuickTime\QTSystem\;c:\Program Files\Java
\jdk1.6.0_01\bin;C:\Program Files\MySQL\MySQL Server 5.1\bin;C:
\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program
Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files
\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft
Visual Studio\VC98\bin;D:\IMS50\bin
WARNING: Cannot access Executable path 'D:\DSPATCH\TASK8.001\REL\BIN',
error 2
DLL search path: D:\ims50;C:\WINNT\system32;C:\WINNT;D:\DSPATCH
\TASK8.001\REL\BIN;D:\IMS50\REL\BIN;C:\JBASE30\BIN;C:
\JBASE30\INCLUDE;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:
\JBASE30\bin;C:\JBASE30\jDP\bin;C:\Program Files\Symantec\pcAnywhere
\;C:\Program Files\QuickTime\QTSystem\;c:\Program Files\Java
\jdk1.6.0_01\bin;C:\Program Files\MySQL\MySQL Server 5.1\bin;C:
\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program
Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files
\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft
Visual Studio\VC98\bin;D:\IMS50\bin

Found : 'C:\WINNT\system32\libjbase.dll'
Found : 'C:\JBASE30\BIN\libinternal.dll'
Found : 'C:\JBASE30\BIN\libjcon.dll'
Found : 'C:\JBASE30\lib\libjpq.dll'
Found : 'C:\JBASE30\lib\libqueries.dll'
Found : 'C:\JBASE30\lib\libutils.dll'
Found : 'C:\JBASE30\lib\libjpq.def'
Found : 'C:\JBASE30\lib\libqueries.def'
Found : 'C:\JBASE30\lib\libutils.def'
Object path (JBCOBJECTLIST) : 'D:\DSPATCH\TASK8.001\REL\LIB;D:
\IMS50\REL\LIB'
WARNING: Cannot access Object path 'D:\DSPATCH\TASK8.001\REL\LIB',
error 2
JBC_CCOMPILER_PATH : C:\Program Files\Microsoft Visual Studio
\VC98
JBC_SHAREDIDE_PATH : C:\Program Files\Microsoft Visual Studio
\Common\MSDEV98\bin
VC++ Registry : Version 6; Path C:\Program Files
\Microsoft Visual Studio\VC98
VC++ BIN Path 'C:\Program Files\Microsoft Visual Studio\VC98\bin' OK
VC++ INCLUDE Path 'C:\Program Files\Microsoft Visual Studio
\VC98\include' OK
VC++ LIB Path 'C:\Program Files\Microsoft Visual Studio\VC98\lib' OK
Program dir (JBCDEV_BIN) : 'D:\IMS50\REL\BIN'
Program Path 'D:\IMS50\REL\BIN' is in your PATH
Subroutine dir (JBCDEV_LIB) : 'D:\IMS50\REL\LIB'
Subroutine path 'D:\IMS50\REL\LIB' is in JBCOBJECTLIST

Full Environent
===============

ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\cbristol\Application Data
CLASSPATH=C:\Program Files\java\jdk1.6.0_01\lib;c:\j21work;c:\DEV
\JAVA
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=CLIF2000
ComSpec=C:\WINNT\system32\cmd.exe
HOME=D:\IMS50
HOMEDRIVE=D:
HOMEPATH=\IMS50
INCLUDE=C:\Program Files\Microsoft Visual Studio\VC98\atl\include;C:
\Program Files\Microsoft Visual Studio\VC98\mfc\include;C:\Program
Files\Microsoft Visual Studio\VC98\include;C:\Program Files\Microsoft
Visual Studio .NET 2003\SDK\v1.1\include\
JBCDEV_BIN=D:\IMS50\REL\BIN
JBCDEV_LIB=D:\IMS50\REL\LIB
JBCEMULATE=JBASE
JBCERRFILE=D:\IMS50\ERRMSG
JBCGLOBALDIR=C:\JBASE30
JBCOBJECTLIST=D:\DSPATCH\TASK8.001\REL\LIB;D:\IMS50\REL\LIB
JBCPORTNO=0
JBCSSD=1142
JBCWINCONNECT=C:\JBASE30\tmp\jPML_0
JBC_CRREQ=1
JEDIFILENAME=D:\IMS50
JEDIFILENAME_MD=D:\IMS50\MD]D
JEDIFILENAME_SYSTEM=D:\IMS50\SYSTEM
JEDI_DISTRIB_DEFERED=1
LIB=C:\Program Files\Microsoft Visual Studio\VC98\mfc\lib;C:\Program
Files\Microsoft Visual Studio\VC98\lib;C:\Program Files\Microsoft
Visual Studio .NET 2003\SDK\v1.1\Lib\
LOGONSERVER=\\CLIF2000
MSDevDir=C:\Program Files\Microsoft Visual Studio\Common\MSDev98
NAVROOT=C:\JBASE30\jDP
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Os2LibPath=C:\WINNT\system32\os2\dll;
Path=D:\DSPATCH\TASK8.001\REL\BIN;D:\IMS50\REL\BIN;C:\JBASE30\BIN;C:
\JBASE30\INCLUDE;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:
\JBASE30\bin;C:\JBASE30\jDP\bin;C:\Program Files\Symantec\pcAnywhere
\;C:\Program Files\QuickTime\QTSystem\;c:\Program Files\Java
\jdk1.6.0_01\bin;C:\Program Files\MySQL\MySQL Server 5.1\bin;C:
\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program
Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files
\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft
Visual Studio\VC98\bin;D:\IMS50\bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 2, AuthenticAMD
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0302
ProgramFiles=C:\Program Files
PROMPT=$P$G
PWD=D:\ims50
QTJAVA=C:\Program Files\QuickTime\QTSystem\QTJava.zip
SHELL=C:\JBASE30\bin\jsh
SystemDrive=C:
SystemRoot=C:\WINNT
TEMP=C:\DOCUME~1\cbristol\LOCALS~1\Temp
TMP=C:\DOCUME~1\cbristol\LOCALS~1\Temp
USERDOMAIN=CLIF2000
USERNAME=cbristol
USERPROFILE=C:\Documents and Settings\cbristol
VS71COMNTOOLS=C:\Program Files\Microsoft Visual Studio .NET
2003\Common7\Tools\
windir=C:\WINNT
_=jdiag

jBase Global Registry
=====================

JBCRELEASEDIR=C:\JBASE30
JBCGLOBALDIR=C:\JBASE30
JBC_PATCHLEVEL=0045
JBC_VERSION=3.4.1
JBC_PROCESSOR_ARCHITECTURE=ix86

jBase Current User Registry
===========================

JBCRELEASEDIR=C:\JBASE30
JBCGLOBALDIR=C:\JBASE30
JBC_PATCHLEVEL=0045
JBC_VERSION=3.4.1
JBC_PROCESSOR_ARCHITECTURE=ix86
JBC_CCOMPILER_PATH=C:\Program Files\Microsoft Visual Studio\VC98
JBC_SHAREDIDE_PATH=C:\Program Files\Microsoft Visual Studio\Common
\MSDEV98\bin

Disk Drive Information
======================

Drive C:\
Total 74.52G Used 64.87G Free 9.66G 12%
SecPerClu 8 BytesPerSec 512 FreeClu 2531025, TotalClu 19535032

Drive D:\
Total 69.24G Used 42.14G Free 27.10G 39%
SecPerClu 8 BytesPerSec 512 FreeClu 7103849, TotalClu 18151433


Status of jBASE Services
========================

jBASE Telnetd Server - RUNNING
jBASE License Server - RUNNING
jBASE jRFS Server - STOPPED
ISG Navigator Daemon - RUNNING


On Nov 25, 4:05 am, Daniel Klein <danielklei...@gmail.com> wrote:
> Btw, I just plugged your program in to my system and it worked perfectly.
>
> Dan
>
> ...
>
> read more »

pat

unread,
Nov 25, 2009, 10:57:22 AM11/25/09
to jBASE
'd:\tmp' ( as in the Basic program ) or
'd:\tEmp' ( as shown below ) ?

Pat.
> ...
>
> read more »

Daniel Klein

unread,
Nov 25, 2009, 12:53:06 PM11/25/09
to jb...@googlegroups.com
That's a 9-year-old version of jBASE. Care to test it on something more recent?

You might want try re-initializing the spooler and recreate your queue(s).

Dan

Jim Idle

unread,
Nov 25, 2009, 1:42:33 PM11/25/09
to jb...@googlegroups.com
Do you have the TERM variable set up?

Jim
> unsub...@googlegroups.com
> > >> >> >> >> > For more options, visit this group
> athttp://groups.google.com/group/jBASE?hl=en
> >
> > >> >> >> > --
> > >> >> >> > Please read the posting guidelines
> at:http://groups.google.com/group/jBASE/web/Posting%20Guidelines
> >
> > >> >> >> > IMPORTANT: Type T24: at the start of the subject line for
> questions specific to Globus/T24
> >
> > >> >> >> > To post, send email to jB...@googlegroups.com
> > >> >> >> > To unsubscribe, send email to jBASE-
> unsub...@googlegroups.com
> > >> >> >> > For more options, visit this group
> athttp://groups.google.com/group/jBASE?hl=en
> >
> > >> >> > --
> > >> >> > Please read the posting guidelines
> at:http://groups.google.com/group/jBASE/web/Posting%20Guidelines
> >
> > >> >> > IMPORTANT: Type T24: at the start of the subject line for
> questions specific to Globus/T24
> >
> > >> >> > To post, send email to jB...@googlegroups.com
> > >> >> > To unsubscribe, send email to jBASE-
> unsub...@googlegroups.com

CLIF

unread,
Nov 25, 2009, 1:48:34 PM11/25/09
to jBASE
The TERM variable, Hmm. What do you mean? I'm setting up the queue
from the console and running the statement:
LIST PART (P
from the console with TERM set to NTCON.

Is there something more I need to do with the TERM variable?

Jim Idle

unread,
Nov 25, 2009, 2:20:36 PM11/25/09
to jb...@googlegroups.com
Yeah but that is the TERM variable for your session and not the background job that is the spooler. I think older releases had a bug whereby if the TERM variable wasn't set then INPUT would fail, and TERM isn't set up for background jobs. You could try to set TERM in your program I suppose, but the best thing to do though is upgrade I think - you are many bugs behind the curve.
Reply all
Reply to author
Forward
0 new messages