Discussion:
Where do I start?
Ron Hudson
2010-05-23 19:43:49 UTC
Permalink
Hey everyone,

Time for the next great leap forward! I want to write a simple full screen
application..

One that keeps a contact list perhaps....

What language would be best for this?

I am guessing Cobol as I have heard it associated with
full screen apps.

Ron
Mike Stramba
2010-05-23 21:21:00 UTC
Permalink
Hmm a full screen contact list.

Heh heh, that's something I started awhile ago, there are many pieces to
it.

A full screen "contact list", actually has two big components / hurdles to
over come :

1) The file handling

2) The full screen stuff

If you don't know Cobol or any other language, that's another hurdle in
itself.

With #1, you can either use "flat files" and cobble up your own indexing /
"database" system, or use VSAM with one of it's native "keyed" methods..

So you might start with just a simple flat file app. The file reading,
positioning , scanning etc.syntax will vary with different languages. You
might look into how Fortran does files, as you're already familiar with the
language.

For something simple just reading the whole file into memory / arrays is
the simplest, then writing out the whole file, to a new file. Not elegant,
but simple to start with.

The next step up might be to look into VSAM files

http://www.jaymoseley.com/hercules/vstutor/vstutor.htm

If you install Jay's vsam "patch" for Cobol, that will get access to VSAM,
he has some example programs you can work from too:

<http://www.jaymoseley.com/hercules/vstutor/vstutor.htm>
http://www.jaymoseley.com/hercules/compiling/vscobol.htm

<http://www.jaymoseley.com/hercules/compiling/vscobol.htm>Once you have the
file handling working, there are four options that I know of for adding the
full screen stuff :

1) Manually

http://tommysprinkle.com/mvs/P3270/index.htm

This program will display the "buffer address", that you can then plug into
your data stream
http://tommysprinkle.com/mvs/P3270/input.htm
<http://tommysprinkle.com/mvs/P3270/index.htm>
2) http://tommysprinkle.com/mvs/fsi/index.htm
"FSI" is suposed to be a full screen helper app. I couldn't get it to
compile, but others may have it working

3) http://home.gci.net/~mike-noel/KICKS/ Kicks for the Turnkey.

I installed this, and ran the examples, but didn't get too far with
being able to compile my own screens / programs.

4) http://tech.groups.yahoo.com/group/CedarLakeEmporium/ Cedar Lake
"Map3270" program.

This is the most "polished" of the 3270 stuff I've found It has a nice
setup program, and decent documentation and Ed is very helpful in his forum.

Mike
Post by Ron Hudson
Hey everyone,
Time for the next great leap forward! I want to write a simple full screen
application..
One that keeps a contact list perhaps....
What language would be best for this?
I am guessing Cobol as I have heard it associated with
full screen apps.
Ron
Tommy Sprinkle
2010-05-24 14:33:46 UTC
Permalink
What type of problems did you have trying to use FSI?





Once you have the file handling working, there are four options that I know
of for adding the full screen stuff :



1) Manually



http://tommysprinkle.com/mvs/P3270/index.htm



This program will display the "buffer address", that you can then plug into
your data stream

http://tommysprinkle.com/mvs/P3270/input.htm


2) http://tommysprinkle.com/mvs/fsi/index.htm

"FSI" is suposed to be a full screen helper app. I couldn't get it to
compile, but others may have it working
Ron Hudson
2010-05-24 22:04:22 UTC
Permalink
@TommySprinkle

I am trying to put together a simple screen branching off from one of your
hello world programs..

I need to know what the two first bits of the Attribute Character are or how
to figure them out.

I have printed out your "3270 Data Stream Programming" but cant seem to find
that part
Mike Schwab
2010-05-24 22:39:48 UTC
Permalink
http://tommysprinkle.com/mvs/P3270/index.htm
Has several pages.
You have to put in some 3270 commands to set up the screen then plug in your
fields.
Post by Ron Hudson
@TommySprinkle
I am trying to put together a simple screen branching off from one of your
hello world programs..
I need to know what the two first bits of the Attribute Character are or
how to figure them out.
I have printed out your "3270 Data Stream Programming" but cant seem to
find that part
--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?
Ron Hudson
2010-05-24 23:04:32 UTC
Permalink
This post might be inappropriate. Click to display it.
scott
2010-05-25 01:33:16 UTC
Permalink
Post by Ron Hudson
Yes, I copied and pasted them all into one local word doc so I could
look at paper while I had my screen up...
Right now I have two fields that accept alpha numeric text
(I have not figgured out how to use them yet -but I have them)
I can tab between them and edit them.
Is there a way to have the cursor resting in one when the user gets control?
Ron.
Yes, look at the IC command which I believe is x'13'. (Saying this
from memory)

As for the input I know you use the TPUT command and it returns a
buffer string. Again from memory, the TPUT returns the length of the
gotten string, and the buffer contains the location of where the cursor
was at, what attention key was hit, following this is the input location
and the text.

Scott
Mike Schwab
2010-05-25 02:03:48 UTC
Permalink
If you send data out, and want it back, you have to turn on the
Modified Data Tag (MDT) bit in the attribute for that field.
Yes, I copied and pasted them all into one local word doc so I could look at paper while I had my screen up...
Right now I have two fields that accept alpha numeric text
(I have not figgured out how to use them yet -but I have them)
I can tab between them and edit them.
Is there a way to have the cursor resting in one when the user gets control?
Ron.
   Yes, look at the IC command which I believe is x'13'.  (Saying this from memory)
   As for the input I know you use the TPUT command and it returns a buffer string.  Again from memory, the TPUT returns the length of the gotten string, and the buffer contains the location of where the cursor was at, what attention key was hit, following this is the input location and the text.
Scott
--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?
Ron Hudson
2010-05-25 03:34:00 UTC
Permalink
Post by Mike Schwab
If you send data out, and want it back, you have to turn on the
Modified Data Tag (MDT) bit in the attribute for that field.
Only if the user does not edit that field.. If the user edits the field the
MDT
is set for you.

Right now I am trying to get underlinded fields to work - my first field
starts
underlining but it never stops to the end of the screen

Oh and is '[' Square bracket not a mainframe character? when I try to place
one in RPF I get
a U with an accent of some sort.
Post by Mike Schwab
Post by Ron Hudson
Yes, I copied and pasted them all into one local word doc so I could look
at paper while I had my screen up...
Post by Ron Hudson
Right now I have two fields that accept alpha numeric text
(I have not figgured out how to use them yet -but I have them)
I can tab between them and edit them.
Is there a way to have the cursor resting in one when the user gets
control?
Post by Ron Hudson
Ron.
Yes, look at the IC command which I believe is x'13'. (Saying this
from memory)
Post by Ron Hudson
As for the input I know you use the TPUT command and it returns a
buffer string. Again from memory, the TPUT returns the length of the gotten
string, and the buffer contains the location of where the cursor was at,
what attention key was hit, following this is the input location and the
text.
Post by Ron Hudson
Scott
--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?
Mike Schwab
2010-05-25 04:26:29 UTC
Permalink
Post by Mike Schwab
If you send data out, and want it back, you have to turn on the
Modified Data Tag (MDT) bit in the attribute for that field.
Only if the user does not edit that field.. If the user edits the field the MDT
is set for you.
And if the user does not change the field and you do not set the MDT
then you will not get the field back. Fine if you have it saved and
properly programed your input decoder to merge the fields.
Right now I am trying to get underlinded fields to work - my first field starts
underlining but it never stops to the end of the screen
Correct. It ends at the next attribute field. Often for each field
you have a Set Buffer Address to position the field literal, a
protected attribute, a literal description, an unrpotected attribute,
old field contents or blanks, and and ending protected attribute.
Oh and is '[' Square bracket not a mainframe character?  when I try to place one in RPF I get
a U with an accent of some sort.
Probably not in the EBCDIC code page.
--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?
Mike Stramba
2010-05-25 12:38:15 UTC
Permalink
Post by Ron Hudson
Oh and is '[' Square bracket not a mainframe character? when I try to place
one in RPF I get
a U with an accent of some sort.
Seems to be an RPF quirk / bug.

Use the PDS TSO command to edit your file :

PDS HERC01.TEST.ASM
FSE MYPROG
<......edit lines ....>
TPUT =c'[hello]',7
save
end <exit FSE editor>
end <exit PDS>
Dave Wade
2010-05-25 06:56:25 UTC
Permalink
Post by Mike Schwab
If you send data out, and want it back, you have to turn on the
Modified Data Tag (MDT) bit in the attribute for that field.
Only if the user does not edit that field.. If the user edits the field
the MDT
is set for you.
Right now I am trying to get underlinded fields to work - my first field
starts
underlining but it never stops to the end of the screen
Oh and is '[' Square bracket not a mainframe character? when I try to
place one in RPF I get
a U with an accent of some sort.
It wasn't on the original 3270 keyboard. When I worked in connecting
ASCII terminals to VM where you put it in EBCDIC was always a topic for
debate. Check your code page settings in the Hercules and also those in
your 3270 emulator. I use PCOMMS with code page 1047 and it puts {} on
hex AD & BD which I think is the "modern" (i.e. the one the IBM C
Compiler) expects standard.
Post by Mike Schwab
Post by Ron Hudson
Yes, I copied and pasted them all into one local word doc so I
could look at paper while I had my screen up...
Post by Ron Hudson
Right now I have two fields that accept alpha numeric text
(I have not figgured out how to use them yet -but I have them)
I can tab between them and edit them.
Is there a way to have the cursor resting in one when the user
gets control?
Post by Ron Hudson
Ron.
Yes, look at the IC command which I believe is x'13'. (Saying
this from memory)
Post by Ron Hudson
As for the input I know you use the TPUT command and it
returns a buffer string. Again from memory, the TPUT returns the
length of the gotten string, and the buffer contains the location of
where the cursor was at, what attention key was hit, following this
is the input location and the text.
Post by Ron Hudson
Scott
--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?
------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/turnkey-mvs/

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
http://groups.yahoo.com/group/turnkey-mvs/join
(Yahoo! ID required)

<*> To change settings via email:
turnkey-mvs-digest-***@public.gmane.org
turnkey-mvs-fullfeatured-***@public.gmane.org

<*> To unsubscribe from this group, send an email to:
turnkey-mvs-unsubscribe-***@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
Rick Fochtman
2010-05-25 19:58:03 UTC
Permalink
---------------------------------------<snip>-----------------------------
Only if the user does not edit that field.. If the user edits the field
the MDT is set for you.

Right now I am trying to get underlinded fields to work - my first field
starts underlining but it never stops to the end of the screen
---------------------------------------<unsnip>---------------------------
You need to do a START FIELD with appropriate attributes, followed by a
REPEAT-TO-ADDRESS followed by your underlining character. And make sure
you follow the command format exactly. RTA, two-byte address, character
to be repeated.

If you're interested, I can share a pair of simple TPUT/TGET subroutines
that are written in Assembler, designed for call from high-level
language code.

---------------------------------------<snip>-----------------------------------
Oh and is '[' Square bracket not a mainframe character? when I try to
place one in RPF I get a U with an accent of some sort.
--------------------------------------<unsnip>----------------------------------
Square brackets are not part of the EBCDIC character set; square
brackets and braces are not part of the 3270 character set.

Rick



------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/turnkey-mvs/

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
http://groups.yahoo.com/group/turnkey-mvs/join
(Yahoo! ID required)

<*> To change settings via email:
turnkey-mvs-digest-***@public.gmane.org
turnkey-mvs-fullfeatured-***@public.gmane.org

<*> To unsubscribe from this group, send an email to:
turnkey-mvs-unsubscribe-***@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
Ron Hudson
2010-05-25 20:10:20 UTC
Permalink
Post by Rick Fochtman
---------------------------------------<snip>-----------------------------
Only if the user does not edit that field.. If the user edits the field
the MDT is set for you.
Right now I am trying to get underlinded fields to work - my first field
starts underlining but it never stops to the end of the screen
I have progressed past this and the square bracket issue below (read 'gave
up')
but I am prefilling my fields with '.' (Periods) just to see where they are.

I wanted to delimit my fields with the bracket but the attribute byte got in
the way
so it would have had to be bracket - space - field - space - bracket.. hmm
that might
not be too bad. anyway - later for that.
Post by Rick Fochtman
---------------------------------------<unsnip>---------------------------
You need to do a START FIELD with appropriate attributes, followed by a
REPEAT-TO-ADDRESS followed by your underlining character. And make sure
you follow the command format exactly. RTA, two-byte address, character
to be repeated.
If you're interested, I can share a pair of simple TPUT/TGET subroutines
that are written in Assembler, designed for call from high-level
language code.
---------------------------------------<snip>-----------------------------------
Oh and is '[' Square bracket not a mainframe character? when I try to
place one in RPF I get a U with an accent of some sort.
--------------------------------------<unsnip>----------------------------------
Square brackets are not part of the EBCDIC character set; square
brackets and braces are not part of the 3270 character set.
That was my final guess too.
Post by Rick Fochtman
Rick
------------------------------------
Yahoo! Groups Links
Ron Hudson
2010-05-25 20:15:28 UTC
Permalink
This is getting quite long - Is there an easy way to "print" a file or to
"punch" it to cards (or something that will let me publish it either on
paper or to the group (If there is interest) ?

It's a member (DSP2) of a pds HUDSON.ASMB.ASM
Rick Fochtman
2010-05-25 23:27:42 UTC
Permalink
-----------------------------------<snip>-------------------------------
Post by Ron Hudson
This is getting quite long - Is there an easy way to "print" a file or
to "punch" it to cards (or something that will let me publish it
either on paper or to the group (If there is interest) ?
It's a member (DSP2) of a pds HUDSON.ASMB.ASM
----------------------------------<unsnip>--------------------------------
If you'll ZIP it and send it to me, I'll look it over.

Rick
Ron Hudson
2010-05-26 00:23:49 UTC
Permalink
How do I get it out without displaying a page and cutting and pasting it
from the terminal?
Post by Rick Fochtman
-----------------------------------<snip>-------------------------------
This is getting quite long - Is there an easy way to "print" a file or to
"punch" it to cards (or something that will let me publish it either on
paper or to the group (If there is interest) ?
It's a member (DSP2) of a pds HUDSON.ASMB.ASM
----------------------------------<unsnip>--------------------------------
If you'll ZIP it and send it to me, I'll look it over.
Rick
Rick Fochtman
2010-05-26 01:29:32 UTC
Permalink
-------------------------------<snip>-------------------------
How do I get it out without displaying a page and cutting and pasting
it from the terminal?
-------------------------------<unsnip>----------------------
Typically, the system card punch is device 00D and SYSOUT class B. Use
the Hercules DEVINIT command to point device 00D to a txt file and any
MVS utility, like IEBGENER, to "punch" the file. From the operator
console, use JES2 command "$tpun1,class=b", followed by "$spun1". After
use terminate your Hercules session, the txt file should contain the
source code, or whatever else you sent to SYSOUT=B.

You can use the same mechanism to send a listing, by using device 00E
and JES unit PRT1.

Rick
yvette hirth
2010-05-26 01:46:53 UTC
Permalink
Post by Rick Fochtman
-------------------------------<snip>-------------------------
How do I get it out without displaying a page and cutting and pasting
it from the terminal?
-------------------------------<unsnip>----------------------
Typically, the system card punch is device 00D and SYSOUT class B. Use
the Hercules DEVINIT command to point device 00D to a txt file and any
MVS utility, like IEBGENER, to "punch" the file. From the operator
console, use JES2 command "$tpun1,class=b", followed by "$spun1". After
use terminate your Hercules session, the txt file should contain the
source code, or whatever else you sent to SYSOUT=B.
You can use the same mechanism to send a listing, by using device 00E
and JES unit PRT1.
if this is a learning-curve type exercise for MVS, then please ignore
what follows.

if you're trying to get data out of a PDS, there's also a command prompt
utility that will read PDSs (they have to be offline iirc) and will
unload in IEBUPDTE format to a file:

http://www.hercules-390.org/hercload.html#utilities

try DASDPDSU. you can specify output in EBCDIC or ASCII.

then stick an IEBUPDTE ./ ADD NAME= in front of it, and Robert is your
Father's Brother.

hth
yvette hirth
Mike Schwab
2010-05-25 21:14:15 UTC
Permalink
At college, they suggested a layout like:

Field one > _________ <
Field two > ______ <
Field three > ____________<

(I have porpotional fonts, the > should be in the same column.)

And, just in case someone should clear the screen and type a lot of
characters, I would place the input buffer as the very last field and
use a large size, eg 4K, just in case a 43*80 screen is defined and
filled up. Probably dedicate a register by doing a LA on the field
and incrementing the address as you process bytes.
Post by Ron Hudson
Right now I am trying to get underlinded fields to work - my first field
starts underlining but it never stops to the end of the screen
I have progressed past this and the square bracket issue below (read 'gave up')
but I am prefilling my fields with '.' (Periods) just to see where they are.
I wanted to delimit my fields with the bracket but the attribute byte got in the way
so it would have had to be bracket - space - field - space - bracket.. hmm that might
not be too bad. anyway - later for that.
--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?
Ron Hudson
2010-05-25 23:26:51 UTC
Permalink
For that chunk of assembly language I begged earlier

It looks like the following
registers are unused: (they are not mentioned in the program)

0 ?
2,3
5,6,7
9,10,11
Rick Fochtman
2010-05-26 01:33:51 UTC
Permalink
-------------------------------<snip>-----------------------------
For that chunk of assembly language I begged earlier

It looks like the following registers are unused: (they are not
mentioned in the program)
0 ?
2,3
5,6,7
9,10,11
----------------------------<unsnip>------------------------------
That's not at all unusual. Just because you have 16 registers (0-15)
available doesn't mean you have to use them. :-)

Some of those registers you didn't mention have special uses in
entry/exit linkage. 0,1,13,14,15 are linkage registers, with
well-defined purposes during entry/exit linkage.

Rick
<mailto:hudson.ra-***@public.gmane.org?subject=Re:%20%5Bturnkey-mvs%5D%20Where%20do%20I%20start?>
Ron Hudson
2010-05-26 05:36:38 UTC
Permalink
Ok, Finally at last I figgured out how to print
the source from my PDS

here it is attached...

I mentioned the register usage because I was hoping for some help
writing the next part of this...

I have a large protected field at the bottom of the screen, and I would like
to parse the output of the tget into it..

There are comment in the source above showing where I would put it.
Basically the idea was to copy the entire INBUF into the field and the
replace all the parts that were "binary" (x'11' - buffer locations - the aid
key)
with c'#' so it could be displayed.
Ron Hudson
2010-05-26 05:41:24 UTC
Permalink
Post by Rick Fochtman
-------------------------------<snip>-----------------------------
For that chunk of assembly language I begged earlier
It looks like the following registers are unused: (they are not mentioned
in the program)
0 ?
2,3
5,6,7
9,10,11
----------------------------<unsnip>------------------------------
That's not at all unusual. Just because you have 16 registers (0-15)
available doesn't mean you have to use them. :-)
I saw what some of them do in some assembly tutorial somewhere..

R01 mvs parmlist
R13 calling program's save area
R14 Return to Calling programs's return address.
R15 My own entrypoint
Post by Rick Fochtman
Some of those registers you didn't mention have special uses in entry/exit
linkage. 0,1,13,14,15 are linkage registers, with well-defined purposes
during entry/exit linkage.
Gerhard Postpischil
2010-05-26 00:01:54 UTC
Permalink
Post by Rick Fochtman
Square brackets are not part of the EBCDIC character set; square
brackets and braces are not part of the 3270 character set.
Which character set? Braces came in as standard (IIRC x'C0' and
x'D0', and reverse slash as x'E0'). Brackets are available with
a graphic escape and the Text feature.



Gerhard Postpischil
Bradford, VT
ScottC
2010-05-25 04:05:36 UTC
Permalink
Oh and is '[' Square bracket not a mainframe character? when I try to place one in RPF I get a U with an accent of some sort.
You really need to try "REVIEW" from RPF option 6 or the READY prompt. Syntax: REVIEW dsname (dsname must previously exist).

If the dsname is a PDS:
1) Select the member with an "S"
2) Type "EDIT" on the Command Line.

You are now in REVEDIT, the closest thing to ISPF PDF EDIT. Brackets stay put. Enter "HEX" on the command line to see the file displayed in HEX, the same way that PDF edit displays it.

Try it, you'll like it.
Ron Hudson
2010-05-26 19:59:01 UTC
Permalink
Ok, Here's my first stab at stepping through the inbuf copying stuff to the
disply

* 00210000
* ************************************************************* 00220000
* 00230000
* MOVE STUFF FRON INBUF INTO DISPLY 00240000
* 00250000
* ************************************************************* 00260000
* BASICALLY, READ A CHAR FROM THE INPUT BUFFER INDEXD 00270000
* DECIDE TO POUND IT (REPLACE IT WITH A POUND SIGN) OR 00280000
* NOT THEN STORE IT TO THE DISPLY+INDEX 00290000
* 00300000
* THEN INCREMENT THE INDEX AND SEE IF IT IS GREATER THAN 00310000
* THE BYTES READ RETURNED BY TGET IN R0 00320000
* ************************************************************* 00330000
* 00340000
SR 2,2 CLEAR MY INDEX 00350000
* 00360000
MVNXT L 6,INBUF,(2) GET CHAR FROM INBUF+R2 00370000
* 00380000
CLI 2,X'3' POUND AIDKEY,BUFR,1ST'11',1ST 00390000
BC 2,NOPOUND IF R6 > '3' THEN DO NOT POUND 00400000
* 00410000
CLI 6,X'11' COMPARE THIS CHAR VS X'11' 00420000
BE POUND IF SO GO POUND IT. 00430000

Right here I need to add code to skip the next char when the prev was
x'11' because it's a binary buffer location.

* 00440000
B NOPOUND NO REASON TO POUND IT - DONT 00450000
* 00460000
POUND L 6,C'#' YOU MUST POUND IT! 00470000
* 00480000
NOPOUND ST 6,DISPLY(2) STORE R6 INTO DISPLAY+R2 00490000
ADD 2,X'1' INCREMENT R2 00500000
* 00510000
CP 2,0 COMPARE MY INDEX AND BYTES READ 00520000
BE CONT0002 DONE IF EQUAL 00530000
B MVNXT IF NOT MORE MOVE NEEDED 00540000
*
CONT0002 goes here

How does it look? Where there is any question my comment gives intent and
is to be trusted over the code (which could be really wrong)

This is actually my first try at not just copypaste assembly for this
machine.
Ron.
Gerhard Postpischil
2010-05-26 20:36:49 UTC
Permalink
Post by Ron Hudson
Ok, Here's my first stab at stepping through the inbuf copying stuff to the
disply
First of all, check the input length returned from TGET. If it's
three, all you got back was a PA key (PA1-PA3, some of them
intercepted by TSO support services, or a PFK, or ENTER without
input). If the length is 6 or more, you continue.

CLI INBUF,C'3' PFK3?
BE exit
LA 6,INBUF+3 point to first data field
LA 5,DISPLY output
SH 0,=H'3' ANY INPUT FIELDS?
BNP done no; skip move loop (clear previous contents first?)
Post by Ron Hudson
MVNXT L 6,INBUF,(2) GET CHAR FROM INBUF+R2 00370000
L works on a word (4 bytes). The syntax is L 6,INBUF(2) - but I
suspect you want to point to it, hence my LA

00380000
Post by Ron Hudson
CLI 2,X'3' POUND AIDKEY,BUFR,1ST'11',1ST 00390000
BC 2,NOPOUND IF R6> '3' THEN DO NOT POUND 00400000
Register two at this point contains zero. Why are you looking at
low storage? If you want to skip the AID and buffer address
sequence, it should be before the loop, because you'll execute
this test each time through the loop. Also don't use BC if you
can avoid it. I remember that 2 is High (for BH NOPOUND), but
your test is meaningless, because everything in your input
buffer (that's returned by TGET) will be higher than 3.
Post by Ron Hudson
CLI 6,X'11' COMPARE THIS CHAR VS X'11' 00420000
BE POUND IF SO GO POUND IT. 00430000
Instructions come in different formats. CLI starts with an address:
FIELDLUP CLI 0(R6),X'11' HIT SBA ?
BE POUND
Post by Ron Hudson
Right here I need to add code to skip the next char when the prev was
x'11' because it's a binary buffer location.
No; you never get here for an 11 - you have a BE

(check that INBUF not exhausted)
MVC 0(1,5),0(6) copy one byte input to output
LA 5,1(,5) ADVANCE OUTPUT
LA 6,1(,6) ADVANCE INPUT
SH 0,=H'1' ADJUST RESIDUAL COUNT
BP FIELDLUP
B done
Post by Ron Hudson
* 00440000
B NOPOUND NO REASON TO POUND IT - DONT 00450000
* 00460000
POUND L 6,C'#' YOU MUST POUND IT! 00470000
POUND MVC 0(3,5),=C'###' SHOW SBA
LA 5,3(,5)
LA 6,3(,6)
SH 0,=H'3'
BP FIELDLUP
B done
Post by Ron Hudson
* 00480000
NOPOUND ST 6,DISPLY(2) STORE R6 INTO DISPLAY+R2 00490000
ADD 2,X'1'
You don't need it, but an increment would be done be A 2,=F'1'
(length of register and storage must match); for small values LA
2,1(,2) would add 1 and clear the high byte (wraps at 16Million)
INCREMENT R2 00500000
Post by Ron Hudson
* 00510000
CP 2,0 COMPARE MY INDEX AND BYTES READ 00520000
BE CONT0002 DONE IF EQUAL 00530000
B MVNXT IF NOT MORE MOVE NEEDED 00540000
*
CONT0002 goes here
done now you can process the buffer, and look at INBUF again to
check for Enter/PF7/PF8/PAn, etc., including possible data file
update.

... your display processing (back to TPUT/TGET above?)

exit - as before
Post by Ron Hudson
How does it look? Where there is any question my comment gives intent and
is to be trusted over the code (which could be really wrong)
Sorry to sound critical, but you didn't think this through -
only one AID/cursor address appears in the buffer, so the
check/skip should be before the loop. When you see an SBA x'11',
then you know three bytes may be skipped; and the POUND/NOPOUND
branch and comments were mixed up. But take heart - my first
professional 360 assembly had about 2000 cards, and got 6000
lines of error messages!


Gerhard Postpischil
Bradford, VT


------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/turnkey-mvs/

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
http://groups.yahoo.com/group/turnkey-mvs/join
(Yahoo! ID required)

<*> To change settings via email:
turnkey-mvs-digest-***@public.gmane.org
turnkey-mvs-fullfeatured-***@public.gmane.org

<*> To unsubscribe from this group, send an email to:
turnkey-mvs-unsubscribe-***@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
Ron Hudson
2010-05-26 21:54:46 UTC
Permalink
Thanks Gerhard

Yes you were critical - but I did goof up a coupla things I should not have,
like
I knew that I needed to discard the first 6 bytes.

I also should have tested to ensure that at least one field is entered ( R0
3 ).
You are right I should not have made those structural errors.

With the remainder of your missive printed out - I will try again.
Ron Hudson
2010-05-26 23:01:03 UTC
Permalink
Another Stab at it with lots of G.Postpischil's code instead of my own:
Ron Hudson
2010-05-26 23:07:10 UTC
Permalink
oops forgot to attach the code, but I think I see one problem I will fix
before I post next.

Ron.
Ron Hudson
2010-05-26 23:19:59 UTC
Permalink
Nope - Same problem

Code compiles with no errors but fails just after the return from TGET, or
at least right after I hit one of the aid keys.

I tried running the program under TEST hoping that it would be a little more
forthcoming than
Your program failed "due to error+", nope. a whole nother body of knowlege
I just sit at the edge of.
Post by Ron Hudson
oops forgot to attach the code, but I think I see one problem I will fix
before I post next.
Ron.
* 00210000
* ************************************************************* 00220000
* 00230000
* MOVE STUFF FRON INBUF INTO DISPLY 00240000
* CODE:G.POSTPISHIL
00250000 Credit where due
* ************************************************************* 00260000
* BASICALLY, READ A CHAR FROM THE INPUT BUFFER INDEXD 00270000
* DECIDE TO POUND IT (REPLACE IT WITH A POUND SIGN) OR 00280000
* NOT THEN STORE IT TO THE DISPLY+INDEX 00290000
* 00300000
* THEN INCREMENT THE INDEX AND SEE IF IT IS GREATER THAN 00310000
* THE BYTES READ RETURNED BY TGET IN R0 00320000
* ************************************************************* 00330000
* 00340000
* FIRST CHECK TO SEE IF TGET RETURNED ANY FIELDS 00350000
* 00360000
SH 0,=H'3' SUBTRACT 3 FROM THE BYTE COUNT 00380000
BNP DONE BRANCH TO NEXT STEP IF BC <= 3 00390000
* 00400000
* NOW WE CAN START LOOKING 00410000
* 00420000
LA 6,INBUF+3 POINTER FOR INPUT 00430000
LA 5,DISPLY POINTER FOR OUTPUT 00440000
* 00450000
MVNXT CLI 0(6),X'11' CHECK CURRENT (R6)=X'11' 00460000
BE POUND GO POUND IT! 00470000
* 00480000
MVC 0(1,5),0(6) MOVE 1 CHAR FROM INBUF TO DISPLY 00490000
LA 5,1(,5) ADVANCE OUTPUT POINTER 00500000
LA 6,1(,6) ADVANCE INPUT POINTER 00510000
SH 0,=H'1' REDUCE BYTE COUNT 00520000
BP MVNXT IF STILL POSITIVE LOOP AGAIN 00530000
B DONE IF NOW ZERO - EXIT MOVELOOP 00540000
* 00550000
* WHEREIN WE STORE A # INSTEAD OF THE SBA WE HAVE. 00560000
* 00570000
POUND MVC 0(3,5),=C'###' SBA BE HERE 00580000
LA 5,3(,5) INCREMENT OUTPUT POINTER BY 3 00590000
LA 6,3(,6) INCREMENT INPUT POINTER BY 3 00600000
SH 0,=H'3' DECREMENT BYTES READ BY 3 00610000
BP MVNXT STILL POSITIVE, LOOP AGAIN 00620000
B DONE GO ASK USER AGIAN 00630000
* 00640000
* SOMEDAY WE DO SOMETHING WITH THE INFORMATION HERE 00650000
* 00660000
DONE B LOOP FOR NOW BRANCH TO PRESENT FORM 00670000
* 00680000


Ok, where did I goof up copying Gerhard's code, the comments are mine
and they will show where I don't understand what I have written.
Kevin Monceaux
2010-05-27 00:16:27 UTC
Permalink
Ron,
Post by Ron Hudson
I tried running the program under TEST hoping that it would be a little more
forthcoming than
Your program failed "due to error+",  nope. a whole nother body of knowlege I
just sit at the edge of.
It's trying to be more forthcoming, but in the usual IBM forthcoming style.
:-) The + after the error message means it'll show you a little more info
about the error, if you ask it to. Type ? and hit return.
--
Kevin
http://www.RawFedDogs.net
http://www.WacoAgilityGroup.org
Bruceville, TX

What's the definition of a legacy system? One that works!
Errare humanum est, ignoscere caninum.
Ron Hudson
2010-05-27 00:29:13 UTC
Permalink
Ron,
Post by Ron Hudson
I tried running the program under TEST hoping that it would be a little
more
Post by Ron Hudson
forthcoming than
Your program failed "due to error+", nope. a whole nother body of
knowledge I
Post by Ron Hudson
just sit at the edge of.
It's trying to be more forthcoming, but in the usual IBM forthcoming style.
:-) The + after the error message means it'll show you a little more info
about the error, if you ask it to. Type ? and hit return.
Thanks, Keven
Now there is something I can work with (at least until I run into the wall)

It's Abend 0C4 reason 0

S0C4 Protection Abend An uncontrolled loop moved data on top of
instructions.
referencing a field in a record of a closed file
referencing an item in Linkage-Section when there was no PARM= in the JCL.
Calling/called programs have different length for items passed in Linkage
Section
with COBOL Sort, doing a STOP RUN or GOBACK while
an input or output procedure is still running

Probably that "loop copying data on top of instructions", I have a loop
perhaps I am not correctly checking for an end condition.

But now it's time for the Routers Final

Ron.
--
Kevin
http://www.RawFedDogs.net
http://www.WacoAgilityGroup.org
Bruceville, TX
What's the definition of a legacy system? One that works!
Errare humanum est, ignoscere caninum.
Gerhard Postpischil
2010-05-27 01:27:11 UTC
Permalink
Post by Ron Hudson
I tried running the program under TEST hoping that it would be a little
more forthcoming than
Your program failed "due to error+", nope. a whole nother body of
knowlege I just sit at the edge of.
I loused up the last message; the + indicates additional
information is available by hitting ENTER, not ?
Post by Ron Hudson
* MOVE STUFF FRON INBUF INTO DISPLY 00240000
* CODE:G.POSTPISHIL 00250000 Credit where due
I'm not sure I want it <g> If I were to do this, I would just
copy code from some other program, and use TRT to find the SBAs.
Post by Ron Hudson
* ************************************************************* 00260000
* BASICALLY, READ A CHAR FROM THE INPUT BUFFER INDEXD 00270000
* DECIDE TO POUND IT (REPLACE IT WITH A POUND SIGN) OR 00280000
* NOT THEN STORE IT TO THE DISPLY+INDEX 00290000
* 00300000
* THEN INCREMENT THE INDEX AND SEE IF IT IS GREATER THAN 00310000
* THE BYTES READ RETURNED BY TGET IN R0 00320000
These comments refer to the old code. In order to use the index
technique, you need additional registers, or use only RX form
instructions.
LA 6,INPUT+3
LA 5,DISPLY
SR 2,2

loop IC 3,0(2,6) INDEXED BYTE
CLM 3,1,=X'11' SBA ?
BE POUND
STC 3,0(2,5)
LA 2,1(,2)
CR 2,0
BL loop
B done

POUND LA 14,0(2,5)
MVC 0(3,5),=C'###'
LA 2,3(,2)
CR 2,0
BL loop

Gerhard Postpischil
Bradford, VT
Ron Hudson
2010-05-27 20:58:19 UTC
Permalink
On Wed, May 26, 2010 at 6:27 PM, Gerhard Postpischil
Post by Gerhard Postpischil
Post by Ron Hudson
I tried running the program under TEST hoping that it would be a little
more forthcoming than
Your program failed "due to error+", nope. a whole nother body of
knowledge I just sit at the edge of.
I loused up the last message; the + indicates additional
information is available by hitting ENTER, not ?
No, you got it right, '?" gave me the abend number but further enters and
'?'s
just say:

DSP2 ENDED DUE TO ERROR+
READY
?
SYSTEM ABEND CODE 0C4 REASON CODE 000
READY
?
NO INFORMATION AVAILABLE
READY

READY
Post by Gerhard Postpischil
Post by Ron Hudson
* MOVE STUFF FRON INBUF INTO DISPLY 00240000
* CODE:G.POSTPISHIL 00250000 Credit where due
I'm not sure I want it <g> If I were to do this, I would just
copy code from some other program, and use TRT to find the SBAs.
Post by Ron Hudson
* ************************************************************* 00260000
* BASICALLY, READ A CHAR FROM THE INPUT BUFFER INDEXD 00270000
* DECIDE TO POUND IT (REPLACE IT WITH A POUND SIGN) OR 00280000
* NOT THEN STORE IT TO THE DISPLY+INDEX 00290000
* 00300000
* THEN INCREMENT THE INDEX AND SEE IF IT IS GREATER THAN 00310000
* THE BYTES READ RETURNED BY TGET IN R0 00320000
These comments refer to the old code. In order to use the index
technique, you need additional registers, or use only RX form
instructions.
I thought they were still close enough - I was trying to use one index to
step through both
at one time - you use R6 and R5 instead.
Post by Gerhard Postpischil
LA 6,INPUT+3
LA 5,DISPLY
SR 2,2
loop IC 3,0(2,6) INDEXED BYTE
CLM 3,1,=X'11' SBA ?
BE POUND
STC 3,0(2,5)
LA 2,1(,2)
CR 2,0
BL loop
B done
POUND LA 14,0(2,5)
MVC 0(3,5),=C'###'
LA 2,3(,2)
CR 2,0
BL loop
Gerhard Postpischil
Bradford, VT
Mike Schwab
2010-05-27 21:42:13 UTC
Permalink
Post by Gerhard Postpischil
loop IC 3,0(2,6) INDEXED BYTE
CLM 3,1,=X'11' SBA ?
The mask portion of these two instructions is 4 bits, 1 bit per byte
to be processed. A value of 3 B'0011' says to process the 3rd and 4th
byte. I think you want to process one byte at a time, B'0001' or 1.

--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?
Gerhard Postpischil
2010-05-27 22:44:23 UTC
Permalink
Post by Mike Schwab
Post by Gerhard Postpischil
loop IC 3,0(2,6) INDEXED BYTE
CLM 3,1,=X'11' SBA ?
The mask portion of these two instructions is 4 bits, 1 bit per byte
to be processed. A value of 3 B'0011' says to process the 3rd and 4th
byte. I think you want to process one byte at a time, B'0001' or 1.
I guess my late-night loopyness is infectious. Where do you see
a mask of 3?


Gerhard Postpischil
Bradford, VT
Rick Fochtman
2010-05-28 01:17:00 UTC
Permalink
------------------------------------<snip>-------------------------------
Post by Mike Schwab
Post by Gerhard Postpischil
loop IC 3,0(2,6) INDEXED BYTE
CLM 3,1,=X'11' SBA ?
The mask portion of these two instructions is 4 bits, 1 bit per byte
to be processed. A value of 3 B'0011' says to process the 3rd and 4th
byte. I think you want to process one byte at a time, B'0001' or 1.
-------------------------------<unsnip>--------------------------------
No. A MASK of X'11' will only reach the last byte of the word, because
ICM will assemble to use only the last 4 bits of the mask in this
illustration.

Rick
Rick Fochtman
2010-05-26 21:56:27 UTC
Permalink
---------------------------------<snip>-----------------------------------
Post by Ron Hudson
Ok, Here's my first stab at stepping through the inbuf copying stuff to the
disply
* 00210000
* ************************************************************* 00220000
* 00230000
* MOVE STUFF FRON INBUF INTO DISPLY 00240000
* 00250000
* ************************************************************* 00260000
* BASICALLY, READ A CHAR FROM THE INPUT BUFFER INDEXD 00270000
* DECIDE TO POUND IT (REPLACE IT WITH A POUND SIGN) OR 00280000
* NOT THEN STORE IT TO THE DISPLY+INDEX 00290000
* 00300000
* THEN INCREMENT THE INDEX AND SEE IF IT IS GREATER THAN 00310000
* THE BYTES READ RETURNED BY TGET IN R0 00320000
* ************************************************************* 00330000
* 00340000
SR 2,2 CLEAR MY INDEX 00350000
* 00360000
MVNXT L 6,INBUF,(2) GET CHAR FROM INBUF+R2 00370000
* 00380000
CLI 2,X'3' POUND AIDKEY,BUFR,1ST'11',1ST 00390000
BC 2,NOPOUND IF R6 > '3' THEN DO NOT POUND 00400000
* 00410000
CLI 6,X'11' COMPARE THIS CHAR VS X'11' 00420000
BE POUND IF SO GO POUND IT. 00430000
Right here I need to add code to skip the next char when the prev was
x'11' because it's a binary buffer location.
* 00440000
B NOPOUND NO REASON TO POUND IT - DONT 00450000
* 00460000
POUND L 6,C'#' YOU MUST POUND IT! 00470000
* 00480000
NOPOUND ST 6,DISPLY(2) STORE R6 INTO DISPLAY+R2 00490000
ADD 2,X'1' INCREMENT R2 00500000
* 00510000
CP 2,0 COMPARE MY INDEX AND BYTES READ 00520000
BE CONT0002 DONE IF EQUAL 00530000
B MVNXT IF NOT MORE MOVE NEEDED 00540000
*
CONT0002 goes here
-------------------------------------<unsnip>----------------------------------
You really need to find a reasonable ASSEMBLER Language text/tutorial.
There are some ideas in Assembler that you're not yet aware of, like
base registers, relative addressing arithmetic modes, etc. :-)

If you can find a Supervisor Services manual, there's some sections on
linkage there. But a textbook will help with addressing/base registers,
arithmetic modes, indexing, looping, etc.

Rick
Ron Hudson
2010-05-26 22:59:29 UTC
Permalink
Post by Rick Fochtman
You really need to find a reasonable ASSEMBLER Language text/tutorial.
There are some ideas in Assembler that you're not yet aware of, like base
registers, relative addressing arithmetic modes, etc. :-)
Well actually I know of the concepts - but the implementation gets me in
trouble with
"G" : ^ ) .. I know what I want to tell the machine - I just don't know how
to say it.

For Example: A base register is a register holding an address that is
modified by an index or indexes to form a pointer. Usually a base register
points to the zero'th array element or the first element in a buffer. A
changeable index is added to the base register to access other parts of the
buffer or elements in the array.

Right?
Post by Rick Fochtman
If you can find a Supervisor Services manual, there's some sections on
linkage there. But a textbook will help with addressing/base registers,
arithmetic modes, indexing, looping, etc.
I will look for that..
Post by Rick Fochtman
Rick
Rick Fochtman
2010-05-26 23:24:29 UTC
Permalink
-------------------------------<snip>-------------------------
For Example: A base register is a register holding an address that is
modified by an index or indexes to form a pointer. Usually a base
register points to the zero'th array element or the first element in a
buffer. A changeable index is added to the base register to access other
parts of the buffer or elements in the array.

Right?
--------------------------------<unsnip>--------------------------
Close, but no cigar. Your program establishes addressability to ALL its
labels by establishing a base register. This way, the base address can
be added to the various displacement addresses in your program so that
your branch instructions, for example, go to the correct main storage
address. Since the largest address value that can be in an instruction
is, in most cases, 4096, you need to establisgh a base so that your
program can be loaded anywhere in main storage. You might find more
information under "Addressing" in the PoPs manual. (Principles of
Operations). Take a look at $TGET, that I sent you. Start from the CSECT
statement and look from there through the " LR R1,R2 " instruction.
for entry linkage, and from the " LR R1,R13 " through the " BR R14 " for
the exit linkage. In the entry linkage, you can see where I define the
base register.

Assembler is like no high-level language you know; many of the concepts
and requirements are completely new to ANY high-level language programmer.

We REALLY need to talk. :-)

Rick
Mike Schwab
2010-05-27 03:05:54 UTC
Permalink
 -------------------------------<snip>-------------------------
For Example: A base register is a register holding an address that is modified by an index or indexes to form a pointer. Usually a base register points to the zero'th array element or the first element in a buffer. A changeable index is added to the base register to access other parts of the buffer or elements in the array.
Right?
--------------------------------<unsnip>--------------------------
Close, but no cigar. Your program establishes addressability to ALL its labels by establishing a base register. This way, the base address can be added to the various displacement addresses in your program so that your branch instructions, for example, go to the correct main storage address. Since the largest address value that can be in an instruction is, in most cases, 4096, you need to establisgh a base so that your program can be loaded anywhere in main storage. You might find more information under "Addressing" in the PoPs manual. (Principles of Operations). Take a look at $TGET, that I sent you. Start from the CSECT statement and look from there through the " LR  R1,R2  " instruction. for entry linkage, and from the " LR R1,R13 " through the " BR R14 " for the exit linkage. In the entry linkage, you can see where I define the base register.
Assembler is like no high-level language you know; many of the concepts and requirements are completely new to ANY high-level language programmer.
We REALLY need to talk. :-)
Rick
Some instructions do not allow index register, because that particular
instruction uses those bits for something else. MVC (move character)
is one instruction you probably will want to use in this program and
uses those bits for the lenght. MVI uses those bits for the Immediate
operand. So best to use one register for the input buffer address and
one for the output field address.

--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?
Gerhard Postpischil
2010-05-27 01:11:42 UTC
Permalink
Post by Ron Hudson
Well actually I know of the concepts - but the implementation gets me in
trouble with
"G" : ^ ) .. I know what I want to tell the machine - I just don't know
how to say it.
For Example: A base register is a register holding an address that is
modified by an index or indexes to form a pointer. Usually a base
register points to the zero'th array element or the first element in a
buffer. A changeable index is added to the base register to access other
parts of the buffer or elements in the array.
Yes and no. If you recall the reserved registers used for
standard linkage, you'll note that R15 should contain the
address of the invoked program. In order for your program to use
branch instructions, it needs a base and offset, as you have
above. However, in order to have branch instructions resolve
correctly, you also need to tell the Assembler what to use for
the base. A simple program might look like:

MYCODE TITLE 'This is a test of the TPUT/TGET service'
MYCODE CSECT , tells Assembler you're starting something
USING *,15 caller's set base
B BEGIN branch around program id
DC AL1(17),CL17'progname &SYSDATE'
BEGIN STM 14,12,12(13) SAVE IN CALLER'S AREA
LR 12,15 COPY TO LESS VOLATILE REGISTER
DROP 15 NO LONGER NEEDED
USING MYCODE,12 NEW BASE FOR BRANCHES
LA 9,LOCSAVE IF NEEDED
ST 9,8(,13) DOWNLINK
ST 13,4(,9) UPLINK
LR 13,9 PROGRAM'S SAVE AREA
... your code

pgmexit L 13,4(,13) USER'S AREA
LM 14,12,12(13) RESTORE
DROP 12
LA 15,0 return code 0-up
BR 14 exit pgm
SPACE 1
LOCSAVE DC 18F'0'
LTORG , for =C'###' etc.
END

There are other ways of doing everything, but that's the basic
linkage and base code.

Also note that when TSO gives an error message with a ?, hitting
enter will produce one or more additional messages.


Gerhard Postpischil
Bradford, VT
Ron Hudson
2010-05-27 03:52:34 UTC
Permalink
Thanks, This is helpful - I have added it all to my notes

On Wed, May 26, 2010 at 6:11 PM, Gerhard Postpischil
Post by Gerhard Postpischil
Post by Ron Hudson
Well actually I know of the concepts - but the implementation gets me in
trouble with
"G" : ^ ) .. I know what I want to tell the machine - I just don't know
how to say it.
For Example: A base register is a register holding an address that is
modified by an index or indexes to form a pointer. Usually a base
register points to the zero'th array element or the first element in a
buffer. A changeable index is added to the base register to access other
parts of the buffer or elements in the array.
Yes and no. If you recall the reserved registers used for
standard linkage, you'll note that R15 should contain the
address of the invoked program. In order for your program to use
branch instructions, it needs a base and offset, as you have
above. However, in order to have branch instructions resolve
correctly, you also need to tell the Assembler what to use for
MYCODE TITLE 'This is a test of the TPUT/TGET service' <--- An assembler
directive?
MYCODE CSECT , tells Assembler you're starting something
USING *,15 caller's set base
<----------------------------------------------- What does the * mean?
B BEGIN branch around program id
DC AL1(17),CL17 'progname &SYSDATE' <-------------------- What's this
here?
BEGIN STM 14,12,12(13) SAVE IN CALLER'S AREA
LR 12,15 COPY TO LESS VOLATILE REGISTER
DROP 15 NO LONGER NEEDED <--- drop - that's a new one, is it the opposite
of a 'using'?
So, the base register is the one that is wearing the "base register hat" at
any given moment.
You put the hat on a given register with the "using" instruction and take
the hat away with
the "drop" instruction?

What happens if there are two using instructions that promote different
registers without
a drop?

Between these two lines is the program without a base register?

Would I even need to branch to a specific address in memory?
Or all branches relative to the base address?
Shared Libraries?
Post by Gerhard Postpischil
USING MYCODE,12 NEW BASE FOR BRANCHES
LA 9,LOCSAVE IF NEEDED <----------------------------------------- the
address of LOCSAVE goes into R9?
ST 9,8(,13) DOWNLINK
ST 13,4(,9) UPLINK
LR 13,9 PROGRAM'S SAVE AREA
... your code
pgmexit L 13,4(,13) USER'S AREA
LM 14,12,12(13) RESTORE
DROP 12
LA 15,0 return code 0-up
BR 14 exit pgm
SPACE 1
LOCSAVE DC 18F'0'
LTORG , for =C'###' etc.
END
There are other ways of doing everything, but that's the basic
linkage and base code.
Also note that when TSO gives an error message with a ?, hitting
enter will produce one or more additional messages.
Gerhard Postpischil
Bradford, VT
Gerhard Postpischil
2010-05-27 05:25:52 UTC
Permalink
Post by Ron Hudson
So, the base register is the one that is wearing the "base register hat"
at any given moment.
You put the hat on a given register with the "using" instruction and
take the hat away with
the "drop" instruction?
What happens if there are two using instructions that promote different
registers without
a drop?
When you have overlapping or identical ranges, the assembler is
supposed to use the one with the lowest displacement. As long as
both registers have the correct contents, no harm is done.
Assemblers after IFOX00 (IEV90, ASMA90) will flag overlaps with
a level 4 warning (may be turned off).
Post by Ron Hudson
Between these two lines is the program without a base register?
No; the assembler uses one or the other.
Post by Ron Hudson
Would I even need to branch to a specific address in memory?
Or all branches relative to the base address?
Shared Libraries?
The arrangement of base/displacement addressing allows automatic
relocation of your code, so you don't need to know the program's
address, because the branches are relative. Later on you'll run
into V and A constants that allow you to address subroutines and
data by address, rather than displacement.
Post by Ron Hudson
Also note that when TSO gives an error message with a ?, hitting
enter will produce one or more additional messages.
I'm really out of it tonight - that's two wrong tries. As
mentioned by Rick, if you see a plus sign, it indicates
additional data, obtained by typing ? and Enter.

Gerhard Postpischil
Bradford, VT


------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/turnkey-mvs/

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
http://groups.yahoo.com/group/turnkey-mvs/join
(Yahoo! ID required)

<*> To change settings via email:
turnkey-mvs-digest-***@public.gmane.org
turnkey-mvs-fullfeatured-***@public.gmane.org

<*> To unsubscribe from this group, send an email to:
turnkey-mvs-unsubscribe-***@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
Ron Hudson
2010-05-27 20:56:04 UTC
Permalink
Hey Rick, Gherhard and Many Others

Thanks for putting up with my foolishness.


The 'move stuff' portion of the code fails - It does not seem to detect the
end of the INBUF. I checked
the example I have and the documentation I could find on TGET and it seems
that TGET returns the
byte count in R1? ?

- I changed the code two ways:

Each loop through the move routine I issue a TPUT and update the screen,
--- so I can see the stuff writing into the output stream
+++ (It does - it just does not stop..)

And I changed to R1 as suggested above.

I am pretty sure the R1 thing is right because I do correctly detect the
situation where any aid
key is pressed without touching any of the fields.

This is from one of those documentation programs and it talks about savign
the length and using r1 to
do it.

TGET (2),(3),R READ FROM THE TERMINAL
STH R1,0(R4) SAVE THE LENGTH FROM TGET
SPACE 2
LR R1,R13 COPY MY SAVE AREA POINTER

btw: What does the "SPACE" directive do above?

I have a list of the machine instructions but no list yet of compiler
directives or macros.

Here is the current state of the routine:

TGET INBUF,INBUFLN,ASIS 00170000
* 00180000
CLI INBUF,X'F3' 00190000
BE EXIT 00200000
* 00210000
* ************************************************************* 00220000
* 00230000
* MOVE STUFF FRON INBUF INTO DISPLY 00240000
* CODE:G.POSTPISHIL 00250000
* ************************************************************* 00260000

My actual understanding is we are using R6 to point into the INBUF
starting in location 3,
and R5 to point into the DISPLY portion of the output stream, We are
incrementing those
two as we move characters betwen the two memory areas. We are also
decrementing the
bytecount returned by TGET in R1 until it goes negative. As we do this
we watch for
x'11' bytes in the input buffer and we replace the x'11' and the next
two bytes with '#' when
we find them, triple incrementing R5 and R6 and triple Decrementing R1.



* BASICALLY, READ A CHAR FROM THE INPUT BUFFER INDEXD 00270000
* DECIDE TO POUND IT (REPLACE IT WITH A POUND SIGN) OR 00280000
* NOT THEN STORE IT TO THE DISPLY+INDEX 00290000
* 00300000
* THEN INCREMENT THE INDEX AND SEE IF IT IS GREATER THAN 00310000
* THE BYTES READ RETURNED BY TGET IN R0 00320000
* ************************************************************* 00330000
* 00340000
* FIRST CHECK TO SEE IF TGET RETURNED ANY FIELDS 00350000
* 00360000
SH 1,=H'3' SUBTRACT 3 FROM THE BYTE COUNT 00370000
BNP DONE BRANCH TO NEXT STEP IF BC <= 3
00380000 <-- not working?
* 00390000
* NOW WE CAN START LOOKING 00400000
* 00410000
LA 6,INBUF+3 POINTER FOR INPUT 00420000
LA 5,DISPLY POINTER FOR OUTPUT 00430000
* 00440000
MVNXT CLI 0(6),X'11' CHECK CURRENT (R6)=X'11' 00450000
BE POUND GO POUND IT! 00460000
* 00470000
MVC 0(1,5),0(6) MOVE 1 CHAR FROM INBUF TO DISPLY 00480000
DEBUG01 TPUT STREAM,STREAMLN,FULLSCR 00490000
LA 5,1(,5) ADVANCE OUTPUT POINTER 00500000
LA 6,1(,6) ADVANCE INPUT POINTER 00510000
SH 1,=H'1' REDUCE BYTE COUNT 00520000
BP MVNXT IF STILL POSITIVE LOOP AGAIN
00530000 <-- or here?
B DONE IF NOW ZERO - EXIT MOVELOOP 00540000
* 00550000
* WHEREIN WE STORE A # INSTEAD OF THE SBA WE HAVE. 00560000
* 00570000
POUND MVC 0(3,5),=C'###' SBA BE HERE 00580000
LA 5,3(,5) INCREMENT OUTPUT POINTER BY 3 00590000
LA 6,3(,6) INCREMENT INPUT POINTER BY 3 00600000
SH 1,=H'3' DECREMENT BYTES READ BY 3 00610000
BP MVNXT STILL POSITIVE, LOOP AGAIN 00620000
B DONE GO ASK USER AGIAN 00630000
* 00640000
* SOMEDAY WE DO SOMETHING WITH THE INFORMATION HERE 00650000
* 00660000
DONE B LOOP FOR NOW BRANCH TO PRESENT FORM 00670000
* 00680000
* 00690000
* 00700000



Thanks again, Ron.
Gerhard Postpischil
2010-05-27 22:42:37 UTC
Permalink
Post by Ron Hudson
The 'move stuff' portion of the code fails - It does not seem to detect
the end of the INBUF. I checked
the example I have and the documentation I could find on TGET and it
seems that TGET returns the
byte count in R1? ?
I just dragged myself upstairs and got the manual. TGET returns
the number of bytes moved to your buffer in R1. However, you
also need to check R15 to see whether the TGET was processed. A
value of 0 indicates good completion, one of 12 that the buffer
was too short (another TGET would retrieve more bytes, but
without the AID, etc.); the other values are ones you would not
normally see (4 - TGET with NOWAIT and no input available; 16 -
invalid parameters; 20 - terminal disconnected)
Post by Ron Hudson
This is from one of those documentation programs and it talks about
savign the length and using r1 to
do it.
TGET (2),(3),R READ FROM THE TERMINAL
STH R1,0(R4) SAVE THE LENGTH FROM TGET
SPACE 2
LR R1,R13 COPY MY SAVE AREA POINTER
btw: What does the "SPACE" directive do above?
SPACE 2 tells the assembler to leave two blank lines, for a
prettier listing. Also that TGET doesn't really save much;
shorter would be:
LA 1,INBUFF
LA 0,L'INBUFF
ICM 1,8,=x'81' TGET ASIS
TGET 1,0,R
Post by Ron Hudson
I have a list of the machine instructions but no list yet of compiler
directives or macros.
The current assembler documentation is on the IBM web site, but
much of the HL stuff doesn't apply to XF. Macros are documented
in manuals specific to use (Using Data Sets; Assembler Services;
etc.).
Post by Ron Hudson
DEBUG01 TPUT STREAM,STREAMLN,FULLSCR 00490000
LA 5,1(,5) ADVANCE OUTPUT POINTER 00500000
LA 6,1(,6) ADVANCE INPUT POINTER 00510000
SH 1,=H'1' REDUCE BYTE COUNT 00520000
The TPUT has just destroyed R1 (address of STREAM), so the loop
will never end. One way of handling is is to use, for instance:
TGET ...
LTR 4,1 check for input
BNP none nothing read

and use register 4 instead of 1 in subsequent code.

Gerhard Postpischil
Bradford, VT


------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/turnkey-mvs/

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
http://groups.yahoo.com/group/turnkey-mvs/join
(Yahoo! ID required)

<*> To change settings via email:
turnkey-mvs-digest-***@public.gmane.org
turnkey-mvs-fullfeatured-***@public.gmane.org

<*> To unsubscribe from this group, send an email to:
turnkey-mvs-unsubscribe-***@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
Ron Hudson
2010-05-27 23:03:14 UTC
Permalink
S U C C E S S !

Now I go away for a while to study VSAM, copy the code again.

Update a few things...

* make sure the 'top' comments all now match what is going on
* change '.' to '_' in prompts (less valid as a data input ...)
* set all fields to MDT = on (easer to parse DSPLY )

Make a stab at storing a vsam record? or perhaps just append it to a flat
file...

Thanks for the help again.
Rick Fochtman
2010-05-28 01:21:06 UTC
Permalink
Be careful. VSAM is a whole new can of worms. Better you should learn
Assembler Language better before jumping into the deep end of the pool. :-)

Rick
---------------------------------------------<snip>============================================
Post by Ron Hudson
S U C C E S S !
Now I go away for a while to study VSAM, copy the code again.
Update a few things...
* make sure the 'top' comments all now match what is going on
* change '.' to '_' in prompts (less valid as a data input ...)
* set all fields to MDT = on (easer to parse DSPLY )
Make a stab at storing a vsam record? or perhaps just append it to a flat
file...
Thanks for the help again.
yvette hirth
2010-05-28 01:25:13 UTC
Permalink
Post by Rick Fochtman
Be careful. VSAM is a whole new can of worms. Better you should learn
Assembler Language better before jumping into the deep end of the pool. :-)
yes, get the hang of "flat files" (sequential) with BAL before deciding
to go to "the VSAM front".

congrats on your success.

yvette hirth
Ron Hudson
2010-05-27 23:07:00 UTC
Permalink
On Thu, May 27, 2010 at 3:42 PM, Gerhard Postpischil
Post by Gerhard Postpischil
Post by Ron Hudson
The 'move stuff' portion of the code fails - It does not seem to detect
the end of the INBUF. I checked
the example I have and the documentation I could find on TGET and it
seems that TGET returns the
byte count in R1? ?
I just dragged myself upstairs and got the manual.
Thank you.
Post by Gerhard Postpischil
TGET returns
the number of bytes moved to your buffer in R1. However, you
also need to check R15 to see whether the TGET was processed.
If my INBUF is generous shouldn't I always have the full input from my
screen?

I suppose I need to watch for 20 though so I can gracefully shut down
in case someone trips over the coax connecting the terminal to the
controller.
Post by Gerhard Postpischil
A
value of 0 indicates good completion, one of 12 that the buffer
was too short (another TGET would retrieve more bytes, but
without the AID, etc.); the other values are ones you would not
normally see (4 - TGET with NOWAIT and no input available; 16 -
invalid parameters; 20 - terminal disconnected)
Post by Ron Hudson
This is from one of those documentation programs and it talks about
savign the length and using r1 to
do it.
TGET (2),(3),R READ FROM THE TERMINAL
STH R1,0(R4) SAVE THE LENGTH FROM TGET
SPACE 2
LR R1,R13 COPY MY SAVE AREA POINTER
btw: What does the "SPACE" directive do above?
SPACE 2 tells the assembler to leave two blank lines, for a
prettier listing. Also that TGET doesn't really save much;
LA 1,INBUFF
LA 0,L'INBUFF
ICM 1,8,=x'81' TGET ASIS
TGET 1,0,R
Post by Ron Hudson
I have a list of the machine instructions but no list yet of compiler
directives or macros.
The current assembler documentation is on the IBM web site, but
much of the HL stuff doesn't apply to XF. Macros are documented
in manuals specific to use (Using Data Sets; Assembler Services;
etc.).
Post by Ron Hudson
DEBUG01 TPUT STREAM,STREAMLN,FULLSCR
00490000
Post by Ron Hudson
LA 5,1(,5) ADVANCE OUTPUT POINTER
00500000
Post by Ron Hudson
LA 6,1(,6) ADVANCE INPUT POINTER
00510000
Post by Ron Hudson
SH 1,=H'1' REDUCE BYTE COUNT
00520000
The TPUT has just destroyed R1 (address of STREAM), so the loop
TGET ...
LTR 4,1 check for input
BNP none nothing read
and use register 4 instead of 1 in subsequent code.
Gerhard Postpischil
Bradford, VT
------------------------------------
Yahoo! Groups Links
Gerhard Postpischil
2010-05-28 00:27:48 UTC
Permalink
Post by Ron Hudson
If my INBUF is generous shouldn't I always have the full input from my
screen?
The 3270 family has more than one form of READ command. The most
frequently used, and the one implemented by TSO, is READ
MODIFIED, that returns the AID, cursor address, and for modified
fields only, the SBA, address, and text of each field. Your
declared buffer length does not affect the input mode. When you
learn about structured fields, you'll find a way to read the
whole screen, but for now you can't. The only way you'd get a
full screen's worth of data, and then some, is if your terminal
supports the Test-Request key, which is deprecated on modern
devices. So under normal conditions the input buffer size is 3
plus the sum of all input field lengths + 3 each (for SBA). So
the absolutely worst case (screen contains only one byte input
fields) for a 24*80 would be 3+(24*40*(3+1))= 3843.

Earlier I mentioned support for screen geometry other than
24*80. IBM's common sizes are 24*80, 32*80, 43*80, and 27*132
(models 2-5). What I do for some of my programs (with custom
macros), is to generate each SBA with a one byte row and one
byte column number; just before writing the screen, I go through
and convert those to the address in 3270 format.

But I'm glad you got it working.


Gerhard Postpischil
Bradford, VT


------------------------------------

Yahoo! Groups Links

<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/turnkey-mvs/

<*> Your email settings:
Individual Email | Traditional

<*> To change settings online go to:
http://groups.yahoo.com/group/turnkey-mvs/join
(Yahoo! ID required)

<*> To change settings via email:
turnkey-mvs-digest-***@public.gmane.org
turnkey-mvs-fullfeatured-***@public.gmane.org

<*> To unsubscribe from this group, send an email to:
turnkey-mvs-unsubscribe-***@public.gmane.org

<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
Ron Hudson
2010-05-27 23:18:40 UTC
Permalink
On Thu, May 27, 2010 at 3:42 PM, Gerhard Postpischil
... the other values are ones you would not
normally see (4 - TGET with NOWAIT and no input available
TGET without NOWAIT means TGET blocks until the user presses an Aid Key?

Does that load the CPU at all? (In a real machine.)

In Hercules is the 3270 being properly emulated by the 3270 emulator (x3270,
c3270, wc3270) where these screens and all the editing are handled outside
of Hercules?
Ron Hudson
2010-05-28 00:14:49 UTC
Permalink
Ok, I though I could do the next few without bugging you guys...

I have a value in binary : 0 0 0 0 0 0 0 1
bits numbered 0 2 3 4 5 6 7 8 in good IBM fasion

Isn't that value x'01'?

And when used as an Attribute Character in Start Field x'1D01' it marks a
normal intensity alphanumeric unprotected field with its MDT set?
(Ref Tommy Sprinkle's 3270 Data Streams)
Rick Fochtman
2010-05-28 01:30:36 UTC
Permalink
-----------------------------------<snip>-------------------------------
Post by Ron Hudson
Ok, I though I could do the next few without bugging you guys...
I have a value in binary : 0 0 0 0 0 0 0 1
bits numbered 0 2 3 4 5 6 7 8 in good IBM fasion
Isn't that value x'01'?
And when used as an Attribute Character in Start Field x'1D01' it marks a
normal intensity alphanumeric unprotected field with its MDT set?
(Ref Tommy Sprinkle's 3270 Data Streams)
-----------------------------------<unsnip>---------------------------------
Firstly, the value you suggest is correct, but the bits are numbered,
from left to right, as 0 - 7

Where did you find to AID/MDT settings? I can't find them in any of my docs.

Rick
Ron Hudson
2010-05-28 01:35:46 UTC
Permalink
Post by Rick Fochtman
-----------------------------------<snip>-------------------------------
Ok, I though I could do the next few without bugging you guys...
I have a value in binary : 0 0 0 0 0 0 0 1
bits numbered 0 2 3 4 5 6 7 8 in good IBM fasion
Isn't that value x'01'?
And when used as an Attribute Character in Start Field x'1D01' it marks a
normal intensity alphanumeric unprotected field with its MDT set?
(Ref Tommy Sprinkle's 3270 Data Streams)
-----------------------------------<unsnip>---------------------------------
Firstly, the value you suggest is correct, but the bits are numbered, from
left to right, as 0 - 7
Where did you find to AID/MDT settings? I can't find them in any of my docs.
look here: http://tommysprinkle.com/mvs/P3270/start.htm

or more specifically here: http://tommysprinkle.com/mvs/P3270/fields.htm
Post by Rick Fochtman
Rick
Greg Price
2010-05-28 09:05:59 UTC
Permalink
Post by Ron Hudson
And when used as an Attribute Character in Start Field x'1D01' it marks a
normal intensity alphanumeric unprotected field with its MDT set?
Ron,

If you want, visit
http://www.prycroft6.com.au/misc/3270.html
and read the text which talks about "parity".
(It's not really parity as such, but that word
is present in the text so you can search for it.)

You could also look at
http://www.prycroft6.com.au/misc/3270eds.html
and search for NOWAIT.

Even these days, processing files with DCBs (non-VSAM)
is much more common in application code than using
ACBs (as you do for VSAM, amongst other things),
so I would recommend trying out sequential I/O
first before looking at VSAM.

Cheers,
Greg
Gerhard Postpischil
2010-05-28 00:37:13 UTC
Permalink
... the other values are ones you would not
normally see (4 - TGET with NOWAIT and no input available
TGET without NOWAIT means TGET blocks until the user presses an Aid Key?
No, it just checks whether input (Enter/PA/PF) is available.
Early versions of TSO, under MVT, had problems handling this,
but MVS should work as expected,
Does that load the CPU at all? (In a real machine.)
Not really. What would load it is if you tried that in a loop,
as opposed to using a TIME WAIT macro (with an exit) to retry.
In Hercules is the 3270 being properly emulated by the 3270 emulator
(x3270, c3270, wc3270) where these screens and all the editing are
handled outside of Hercules?
To date I've used Tom Brennan's Vista, Blue Zone, and QW3270
without any problems. The only one I've had problems with is the
c3270/wc3270 code; I first installed the complete tk3, and got
odd sized Windows windows, with the cursor being in the wrong
place, and things not displaying when the screen was updated.
But I also used larger screen sizes (43*80 and 27*132), and the
problems might have been fixed since then.


Gerhard Postpischil
Bradford, VT
Rick Fochtman
2010-05-28 01:25:51 UTC
Permalink
-------------------------------------<snip>----------------------------------------
Post by Ron Hudson
On Thu, May 27, 2010 at 3:42 PM, Gerhard Postpischil
... the other values are ones you would not
normally see (4 - TGET with NOWAIT and no input available
TGET without NOWAIT means TGET blocks until the user presses an Aid Key?
----------------------------------<unsnip>---------------------------------
It means your program is in a WAIT state until the user presses some
sort of AID-related key. The rest of the workload on the machine
proceeds just as though you weren't there.

----------------------------------------<snip>--------------------------------------------
Post by Ron Hudson
Does that load the CPU at all? (In a real machine.)
---------------------------------------<unsnip>--------------------------------------------
no.

--------------------------------------<snip>----------------------------------------------
Post by Ron Hudson
In Hercules is the 3270 being properly emulated by the 3270 emulator
(x3270, c3270, wc3270) where these screens and all the editing are
handled outside of Hercules?
----------------------------------<unsnip>---------------------------------------------
Hercules and the OS under it see only a 3270 tube. All the translations,
emulations, etc. are covered outside Hercules.

Rick
Ron Hudson
2010-05-28 01:33:56 UTC
Permalink
Post by Ron Hudson
In Hercules is the 3270 being properly emulated by the 3270 emulator
(x3270, c3270, wc3270) where these screens and all the editing are handled
outside of Hercules?
----------------------------------<unsnip>---------------------------------------------
Hercules and the OS under it see only a 3270 tube. All the translations,
emulations, etc. are covered outside Hercules.
Rick
hmm let me ask that more directly- When I am tabbing between fields and
editing the information there, Is Hercules operating or
is the 3270 emulation I am using providing that?

I ask since the 3270 emulator connectes to Hercules via a telnet session (on
a strange port)...


(different question)

If I had a real 3270 and a real controller could I hook it to hercules?
Gerhard Postpischil
2010-05-28 03:55:24 UTC
Permalink
Post by Ron Hudson
hmm let me ask that more directly- When I am tabbing between fields and
editing the information there, Is Hercules operating or
is the 3270 emulation I am using providing that?
That's your emulator at work. Hercules doesn't know what you did
until you hit an attention key.
Post by Ron Hudson
I ask since the 3270 emulator connectes to Hercules via a telnet session
(on a strange port)...
To be pedantic, it's unlike to be telnet (line mode), but rather
tn3270 or tn3270e
Post by Ron Hudson
If I had a real 3270 and a real controller could I hook it to hercules?
If you have to ask, no <G> Some IBM controllers (with a -R)
suffix come with an ethernet or token-ring connection, and you
can get matching cards for your PC (ethernet controllers are
more desirable, hence more expensive). But you'll probably need
professional help to set everything up and generate the system
floppies.

Gerhard Postpischil
Bradford, VT
Jeff Sumner
2010-05-28 04:24:01 UTC
Permalink
We've still got a 3174 (and so) the floppy generation software on a system with the 5.25" floppy, if anyone needs...

In Production.

J
Post by Gerhard Postpischil
Post by Ron Hudson
hmm let me ask that more directly- When I am tabbing between fields and
editing the information there, Is Hercules operating or
is the 3270 emulation I am using providing that?
That's your emulator at work. Hercules doesn't know what you did
until you hit an attention key.
Post by Ron Hudson
I ask since the 3270 emulator connectes to Hercules via a telnet session
(on a strange port)...
To be pedantic, it's unlike to be telnet (line mode), but rather
tn3270 or tn3270e
Post by Ron Hudson
If I had a real 3270 and a real controller could I hook it to hercules?
If you have to ask, no <G> Some IBM controllers (with a -R)
suffix come with an ethernet or token-ring connection, and you
can get matching cards for your PC (ethernet controllers are
more desirable, hence more expensive). But you'll probably need
professional help to set everything up and generate the system
floppies.
Gerhard Postpischil
Bradford, VT
Ron Hudson
2010-05-28 04:28:06 UTC
Permalink
On Thu, May 27, 2010 at 8:55 PM, Gerhard Postpischil
Post by Gerhard Postpischil
If you have to ask, no <G> Some IBM controllers (with a -R)
suffix come with an ethernet or token-ring connection, and you
Post by Gerhard Postpischil
can get matching cards for your PC (ethernet controllers are
more desirable, hence more expensive). But you'll probably need
professional help to set everything up and generate the system
floppies.
Gerhard Postpischil
Bradford, VT
For some time I worked for the unit in Novell that made the communications
server
software (Software in a novell server pretended to be a controller and
software in
each workstation emulated the 3270 terminal - complete with a clickit on the
screen
function keyboard (The company novell bought to have that product "CXI" i
think
also had an actual keyboard that would plug into the PS2 keyboard socket and
would
accept the normal keyboards plug)

Too bad I only handled the Novell stuff for them- Network administrator.
Dave Wade
2010-05-28 07:18:20 UTC
Permalink
-----Original Message-----
Sent: 28 May 2010 04:55
Subject: Re: [turnkey-mvs] Re: Where do I start?
Post by Ron Hudson
hmm let me ask that more directly- When I am tabbing between fields
and editing the information there, Is Hercules operating or is the
3270 emulation I am using providing that?
That's your emulator at work. Hercules doesn't know what you did
until you hit an attention key.
Post by Ron Hudson
I ask since the 3270 emulator connectes to Hercules via a telnet
session (on a strange port)...
It's a "strange port" because only one program can listen on one port/ip
address pair at any time. So if the system on which Hercules is running
already has something listening on the normal TELNET port, Hercules can't
use it. On most Windows systems its OK to set the port number to the normal
one for Telnet (23 I think).
To be pedantic, it's unlike to be telnet (line mode), but rather
tn3270 or tn3270e
Post by Ron Hudson
If I had a real 3270 and a real controller could I hook it to hercules?
I would say only by cheating ;-) . You can't hook the controller up to
Hercules, but some 3270's can act as a TN3270 client, and so can connect to
Hercules. However Hercules won't "know" it's a "real" 3270 on the end of the
line, and it will look to the OS like a local channel attached (see below)
3270.

Originally 3270 controllers could be physically connected to a mainframe in
number of ways. There were "local channel attached" which connected directly
to the channel system via "Bus and Tag" cables. These are what Hercules
emulates. To connect one of these to a PC would require a S/370 channel card
in the PC and as Hercules has no drivers you can't connect a 3270 to Herc in
this manner.

As the name implies "Local" controllers must be close to the mainframe (not
sure what the max length of bus+tag probably 500ft or so), and (normally) a
3270 can't be more than about 1500yds (say a mile) from the controller you
needed an alternative connection method. So there are remote 3270's which
connect by Syncronous communications lines (SDLC or Bi-Sync). So whilst
syncronus comms cards are not unkown for the PC, again Hercules does not
understand them so you can't connect that way.

Lastly there are Token Ring or Ethernet attached controllers. Note that
these still don't (normally) use TCP/IP they use SNA protocols over the
network so they won't pass through modern routers.

These normally connect to the Mainframe via a "Front End Processor) say a
3745 or 3725. As these are computer systems in their own right you would
probably need an extra emulator for these, so again you can't connect to
Hercules in that way.
If you have to ask, no <G> Some IBM controllers (with a -R)
You can also add a token ring card to many none "-R" controllers. These
could be used to get Token Ring access onto the mainframe without having a
3720, 3725 or 3745. When my workplace had a mainframe we had several
controllers like this to get traffic from IBM's "SNA server for Windows"
into VM and VSE. Both Microsoft and IBM produced SNA Server products that
could act as remote token ring attached 3270's. You could use a TN3270
client to connect to the SNA Server software. This then connected you to the
Mainframe as if you were on a real 3270 controller. I don't think the free
MVS has support for this type of 3174 so again not much use to many
Heruleans.
suffix come with an ethernet or token-ring connection, and you
can get matching cards for your PC (ethernet controllers are
more desirable, hence more expensive). But you'll probably need
professional help to set everything up and generate the system
floppies.
Gerhard Postpischil
Bradford, VT
Dave
G4UGM
Rick Fochtman
2010-05-28 01:14:54 UTC
Permalink
------------------------------------<snip>--------------------------------
Post by Gerhard Postpischil
Post by Ron Hudson
This is from one of those documentation programs and it talks about
savign the length and using r1 to
do it.
TGET (2),(3),R READ FROM THE TERMINAL
STH R1,0(R4) SAVE THE LENGTH FROM TGET
SPACE 2
LR R1,R13 COPY MY SAVE AREA POINTER
btw: What does the "SPACE" directive do above?
SPACE 2 tells the assembler to leave two blank lines, for a
prettier listing. Also that TGET doesn't really save much;
LA 1,INBUFF
LA 0,L'INBUFF
ICM 1,8,=x'81' TGET ASIS
TGET 1,0,R
-------------------------------<unsnip>---------------------------------------
Are you planning to store in location X'000001' for zero bytes? That's
what you're saying with " TGET 1,0,R ". The first TGET above tells
the system to store the answer in the location defined by register 2,
for a maximum length as defined in register 3. This is called "REGISTER
NOTATION". :-)

------------------------------<snip>----------------------------------
Post by Gerhard Postpischil
The current assembler documentation is on the IBM web site, but
much of the HL stuff doesn't apply to XF. Macros are documented
in manuals specific to use (Using Data Sets; Assembler Services;
etc.).
Post by Ron Hudson
DEBUG01 TPUT STREAM,STREAMLN,FULLSCR 00490000
LA 5,1(,5) ADVANCE OUTPUT POINTER 00500000
LA 6,1(,6) ADVANCE INPUT POINTER 00510000
SH 1,=H'1' REDUCE BYTE COUNT 00520000
The TPUT has just destroyed R1 (address of STREAM), so the loop
TGET ...
LTR 4,1 check for input
BNP none nothing read
and use register 4 instead of 1 in subsequent code.
-------------------------------<snip>------------------------------
I think the point Gerhard is trying to make is this: awareness of
register conventions is a MANDATORY PART of Assembler programming. It's
a lot more complicated, in many ways, because you're working at the
machine level; you don't have a HLL compiler making those decisions for
you "under the covers". And in most HLL's, you don't have to be
concerned about arithmetic modes, because the conversions are done for
you "under the covers".

Rick
Ron Hudson
2010-05-28 01:30:15 UTC
Permalink
Post by Rick Fochtman
------------------------------------<snip>--------------------------------
This is from one of those documentation programs and it talks about
savign the length and using r1 to
do it.
TGET (2),(3),R READ FROM THE TERMINAL
STH R1,0(R4) SAVE THE LENGTH FROM TGET
SPACE 2
LR R1,R13 COPY MY SAVE AREA POINTER
btw: What does the "SPACE" directive do above?
SPACE 2 tells the assembler to leave two blank lines, for a
prettier listing. Also that TGET doesn't really save much;
LA 1,INBUFF
LA 0,L'INBUFF
ICM 1,8,=x'81' TGET ASIS
TGET 1,0,R
-------------------------------<unsnip>---------------------------------------
Are you planning to store in location X'000001' for zero bytes? That's what
you're saying with " TGET 1,0,R ". The first TGET above tells the system
to store the answer in the location defined by register 2, for a maximum
length as defined in register 3. This is called "REGISTER NOTATION". :-)
Actually it's just someone's example code to me, All I was looking at here
was that they seem to be getting the read byte count
from R1.
Post by Rick Fochtman
------------------------------<snip>----------------------------------
The current assembler documentation is on the IBM web site, but
much of the HL stuff doesn't apply to XF. Macros are documented
in manuals specific to use (Using Data Sets; Assembler Services;
etc.).
DEBUG01 TPUT STREAM,STREAMLN,FULLSCR 00490000
LA 5,1(,5) ADVANCE OUTPUT POINTER 00500000
LA 6,1(,6) ADVANCE INPUT POINTER 00510000
SH 1,=H'1' REDUCE BYTE COUNT 00520000
The TPUT has just destroyed R1 (address of STREAM), so the loop
TGET ...
LTR 4,1 check for input
BNP none nothing read
and use register 4 instead of 1 in subsequent code.
I followed Gerhard's suggestion here - Transfer the value from R1 to R4 to
work with it, I was unaware what the TPUT
macro did under the covers - and actually since it's working now I don't
need to update the screen as DISPLY is loaded
and I can retire the extra call to TPUT
Post by Rick Fochtman
-------------------------------<snip>------------------------------
I think the point Gerhard is trying to make is this: awareness of register
conventions is a MANDATORY PART of Assembler programming. It's a lot more
complicated, in many ways, because you're working at the machine level; you
don't have a HLL compiler making those decisions for you "under the covers".
And in most HLL's, you don't have to be concerned about arithmetic modes,
because the conversions are done for you "under the covers".
Rick
Rick Fochtman
2010-05-25 19:48:42 UTC
Permalink
-----------------------------------<snip>--------------------------------
If you send data out, and want it back, you have to turn on the Modified
Data Tag (MDT) bit in the attribute for that field.
--------------------------------<unsnip>-----------------------------
On the other hand, if you wish to read only the fields the user
modified, leave the MDT off and TGET will return only the user-modified
fields, with their buffer addresses.

----------------------------------<snip>--------------------------
Where do Forest Rangers go to get away from it all?
------------------------------<unsnip>-----------------------------
Cleveland :-)


Rick
scott
2010-05-25 20:02:12 UTC
Permalink
Post by Rick Fochtman
-----------------------------------<snip>--------------------------------
If you send data out, and want it back, you have to turn on the
Modified Data Tag (MDT) bit in the attribute for that field.
--------------------------------<unsnip>-----------------------------
On the other hand, if you wish to read only the fields the user
modified, leave the MDT off and TGET will return only the
user-modified fields, with their buffer addresses.
----------------------------------<snip>--------------------------
Where do Forest Rangers go to get away from it all?
------------------------------<unsnip>-----------------------------
Cleveland :-)
"A strange name for a Planet."
Jeff Sumner
2010-05-25 20:40:07 UTC
Permalink
Well, they'd come to Shaker Heights.
Apropos to very little:
Great Mexican food here. And two of my friends at National City Bank were hired into Westfield Insurance as Mainframe Assembly Programmers. Last year. Fantastic!
Go Howard the Duck!
J
DE KC4FOX in Beautiful Shaker Heights, Ohio.
Post by scott
Post by Rick Fochtman
-----------------------------------<snip>--------------------------------
If you send data out, and want it back, you have to turn on the Modified Data Tag (MDT) bit in the attribute for that field.
--------------------------------<unsnip>-----------------------------
On the other hand, if you wish to read only the fields the user modified, leave the MDT off and TGET will return only the user-modified fields, with their buffer addresses.
----------------------------------<snip>--------------------------
Where do Forest Rangers go to get away from it all?
------------------------------<unsnip>-----------------------------
Cleveland :-)
"A strange name for a Planet."
Mike Schwab
2010-05-25 21:03:54 UTC
Permalink
Shaker Heights, Cleveland, OH, USA? Do you know Rick Smith, who is a
programmer who works at an insurance company, maybe even Westfield?

How about the Kickstand Cyclery in that town? The co-owners Yehuda
Moon and Joe King?

Here's the shop's first appearance: http://www.yehudamoon.com
Post by Jeff Sumner
Well, they'd come to Shaker Heights.
Great Mexican food here. And two of my friends at National City Bank were hired into Westfield Insurance as Mainframe Assembly Programmers. Last year. Fantastic!
Go Howard the Duck!
J
DE KC4FOX in Beautiful Shaker Heights, Ohio.
--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?

(Climbing skyscrapers?)
Jeff Sumner
2010-05-26 01:47:33 UTC
Permalink
I know neither, and haven't heard of Kickstand Cyclery- but I do work at a bicycle store on the weekends ("Bicycle Boulevard") for an old buddy.
I happened to know the Mainframers that left because I'm DNS/DHCP/Unix support and they stuck us behind the saltiest people in the whole of IT, the mainframers.
I can get 'em to smile now every time I have to ask about how to recover from filling up spool, or canceling a user, or threatening the console of one of our CEC's with a quiesce ("we can recover from that, now...")

Anyway. Back to the 3270 lecture. I'm enjoying it, and would love to be able to do the same.

J
Shaker Heights, Cleveland, OH, USA? Do you know Rick Smith, who is a
programmer who works at an insurance company, maybe even Westfield?
How about the Kickstand Cyclery in that town? The co-owners Yehuda
Moon and Joe King?
Here's the shop's first appearance: http://www.yehudamoon.com
Post by Jeff Sumner
Well, they'd come to Shaker Heights.
Great Mexican food here. And two of my friends at National City Bank were hired into Westfield Insurance as Mainframe Assembly Programmers. Last year. Fantastic!
Go Howard the Duck!
J
DE KC4FOX in Beautiful Shaker Heights, Ohio.
--
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?
(Climbing skyscrapers?)
Mike Stramba
2010-05-25 02:07:58 UTC
Permalink
Post by scott
As for the input I know you use the TPUT command and it returns a
buffer string. Again from memory, the TPUT returns the length of the
Is that maybe a TGET ? :)

Here is "SIMPDF.JCL" (writtien by somitcw I think).. it does 3270
input / output and if you allocate SYSPRINT to a dataset it will
output to that file... You need to allocate / create the file fiirst).

It does a TGET for the input:

TGET PFREPLY,L'PFREPLY,ASIS Read input data

http://mstram.webfactional.com/down/herc/simpdf.jcl
somitcw
2010-06-06 17:03:46 UTC
Permalink
Post by Mike Stramba
Post by scott
As for the input I know you use the TPUT command and
it returns a buffer string. Again from memory, the
TPUT returns the length of the
Is that maybe a TGET ? :)
Here is "SIMPDF.JCL" (writtien by somitcw I think)..
it does 3270 input / output and if you allocate SYSPRINT
to a dataset it will output to that file... You need to
allocate / create the file fiirst).
TGET PFREPLY,L'PFREPLY,ASIS Read input data
http://mstram.webfactional.com/down/herc/simpdf.jcl
00 0000 40
00 0001 C1
00 0010 C2
00 0011 C3
00 0100 C4
00 0101 C5
00 0110 C6
00 0111 C7
00 1000 C8
00 1001 C9
00 1010 4A
00 1011 4B
00 1100 4C
00 1101 4D
00 1110 4E
00 1111 4F
01 0000 50
01 0001 D1
01 0010 D2
01 0011 D3
01 0100 D4
01 0101 D5
01 0110 D6
01 0111 D7
01 1000 D8
01 1001 D9
01 1010 5A
01 1011 5B
01 1100 5C
01 1101 5D
01 1110 5E
01 1111 5F
10 0000 60
10 0001 61
10 0010 E2
10 0011 E3
10 0100 E4
10 0101 E5
10 0110 E6
10 0111 E7
10 1000 E8
10 1001 E9
10 1010 6A
10 1011 6B
10 1100 6C
10 1101 6D
10 1110 6E
10 1111 6F
11 0000 F0
11 0001 F1
11 0010 F2
11 0011 F3
11 0100 F4
11 0101 F5
11 0110 F6
11 0111 F7
11 1000 F8
11 1001 F9
11 1010 7A
11 1011 7B
11 1100 7C
11 1101 7D
11 1110 7E
11 1111 7F
Mike Stramba
2010-06-06 19:04:03 UTC
Permalink
Somitcw,

What's your point?

That I apparently already know how to add more terminals ? .. and
shouldn't be asking about it .. again?

Well, I don't.

Like most things that I've tried to do in TKMVS, that hercules.cnf
was only a *partial piece* of yet another puzzle.

The complete documentation / howto of "How to add more terminals", was
something I was looking for, and asked about (probably in that post
you dug up), but never did find.

Mike
Post by somitcw
00 0000 40
00 0001 C1
00 0010 C2
00 0011 C3
00 0100 C4
00 0101 C5
00 0110 C6
00 0111 C7
00 1000 C8
00 1001 C9
00 1010 4A
00 1011 4B
00 1100 4C
00 1101 4D
00 1110 4E
00 1111 4F
01 0000 50
01 0001 D1
01 0010 D2
01 0011 D3
01 0100 D4
01 0101 D5
01 0110 D6
01 0111 D7
01 1000 D8
01 1001 D9
01 1010 5A
01 1011 5B
01 1100 5C
01 1101 5D
01 1110 5E
01 1111 5F
10 0000 60
10 0001 61
10 0010 E2
10 0011 E3
10 0100 E4
10 0101 E5
10 0110 E6
10 0111 E7
10 1000 E8
10 1001 E9
10 1010 6A
10 1011 6B
10 1100 6C
10 1101 6D
10 1110 6E
10 1111 6F
11 0000 F0
11 0001 F1
11 0010 F2
11 0011 F3
11 0100 F4
11 0101 F5
11 0110 F6
11 0111 F7
11 1000 F8
11 1001 F9
11 1010 7A
11 1011 7B
11 1100 7C
11 1101 7D
11 1110 7E
11 1111 7F
Rick Fochtman
2010-05-25 19:44:15 UTC
Permalink
----------------------------------<snip>------------------------------
Post by scott
Yes, look at the IC command which I believe is x'13'. (Saying this
from memory)
As for the input I know you use the TPUT command and it returns a
buffer string. Again from memory, the TPUT returns the length of the
gotten string, and the buffer contains the location of where the
cursor was at, what attention key was hit, following this is the input
location and the text.
------------------------------------------<unsnip>-------------------------------
You're confusing TPUT with TGET. Unfortunately, TGET doesn't give that
much information. There are several chapters in the TSO Programming
Guide devoted to terminal I/O and you should study them carefully before
attempting any kind of major project. Go get the manual from the IBM Web
site, in either BookManager or PDF format and study it carefully.

You can learn about the various commands, addressing, etc. for the 3270
from "IBM 3270 Information Display System Reference Summary", GX20-1878.
If you see multiper versions, grab them all as the 3270 display evolved
quite a bit and I don't remember exactly which models were available in
the days of MVS 3.8J.

Rick
scott
2010-05-25 20:01:21 UTC
Permalink
Post by Rick Fochtman
----------------------------------<snip>------------------------------
Post by scott
Yes, look at the IC command which I believe is x'13'. (Saying
this from memory)
As for the input I know you use the TPUT command and it returns a
buffer string. Again from memory, the TPUT returns the length of the
gotten string, and the buffer contains the location of where the
cursor was at, what attention key was hit, following this is the
input location and the text.
------------------------------------------<unsnip>-------------------------------
You're confusing TPUT with TGET. Unfortunately, TGET doesn't give that
much information. There are several chapters in the TSO Programming
Guide devoted to terminal I/O and you should study them carefully
before attempting any kind of major project. Go get the manual from
the IBM Web site, in either BookManager or PDF format and study it
carefully.
You can learn about the various commands, addressing, etc. for the
3270 from "IBM 3270 Information Display System Reference Summary",
GX20-1878. If you see multiper versions, grab them all as the 3270
display evolved quite a bit and I don't remember exactly which models
were available in the days of MVS 3.8J.
Rick
Quite correct, one uses TGET to get the information.
Ron Hudson
2010-05-25 20:06:27 UTC
Permalink
Ok, I need a short segment of assembly done for me (because I don't quite
understand most of this yet...

There is a buffer that the tget uses to return stuff from the screen
called INBUF

INBUF DS XL128
INBUFLN EQU *-INBUF

There is a protected field in the screen
where I want to display the text that was in INBUF

Actually I thought I would be cute and have IBBUF simply
be the same memory as this DISPLY so I could check it out.

Please step through INBUF and change the code '11 xx' to some
special character like '#'. This is the mark between data items
11 is sentinel, and the next byte is the buffer address.
I don't know what TSO puts after the last data item text.

Also please replace bytes 1 and 2 with #s
(these are the aid key and cursor location)

* INPUT BUFFER IS NO LONGER PART OF THE OUTPUT STREAM
*
DC X'115AD1' SBA
DC X'1DE0' SF (PROTECTED)
DISPLY DC C'................................'
DC C'................................'
DC C'................................'
DC C'................................'

Here is where I plan to insert the donated code:

*
* GO TO USER FOR INPUT
*
LOOP TPUT STREAM,STREAMLN,FULLSCR
TGET INBUF,INBUFLN,ASIS
*
CLI INBUF,X'F3'
BE EXIT
*
* MOVE STUFF FRON INBUF INTO DISPLY
*
* -------------your code here --------------------
B LOOP CONTINUE
*
EXIT STLINENO LINE=1
STFSMODE OFF
STTMPMD OFF

And remeber good comments will help Ron stop asking for silly stuff!

: ^ ) (but are not required because beggars musn't be choosers)

Thanks!
Gerhard Postpischil
2010-05-23 21:32:03 UTC
Permalink
Post by Ron Hudson
Time for the next great leap forward! I want to write a simple full
screen application..
One that keeps a contact list perhaps....
What language would be best for this?
I am guessing Cobol as I have heard it associated with
full screen apps.
The language to write it in is the one you know well enough to
finish the task <g> Of course, *real* programmers use assembler
language (or better yet, key code in from the front panel <G>).

CoBOL doesn't know 3270s from a hole in the ground; however, it
is frequently used with CICS because it makes transaction
writing fairly simple, and leaves all the dirty work to CICS.
There is a TSO application called KICKS that's still a work in
progress, that might do most of the work for you. CICS also
works with PL/I, but I don't know whether KICKS supports it.

(While I was writing this, I was interrupted by a phone call,
and when I came back I noticed Mike Stramba supplied most of the
information).

For VSAM, look at Dave Cole's SCHEDULE program - you don't need
to schedule stuff, but it has a generalized VSAM I/O routine
that could get you started.

For 3270, I looked at FSI, but have never tried it, as I prefer
to use my own code. The big hitch is learning how the display
hardware works, and writing code that is not locked into the
default 24*80 size.


Gerhard Postpischil
Bradford, VT
Ron Hudson
2010-05-23 22:01:33 UTC
Permalink
Thanks Mike and Gerhard...



On Sun, May 23, 2010 at 2:32 PM, Gerhard Postpischil
Post by Gerhard Postpischil
Time for the next great leap forward! I want to write a simple full
screen application..
One that keeps a contact list perhaps....
What language would be best for this?
I am guessing Cobol as I have heard it associated with
full screen apps.
The language to write it in is the one you know well enough to
finish the task <g> Of course, *real* programmers use assembler
language (or better yet, key code in from the front panel <G>).
I am most familiar with Fortran but it does not seem to be one of the
choices. I wrote a Cobol program in highschool on paper and never
even tried to execute it. Assembly is a deep mystery that I don't
think I am prepared to attack just yet. Cobol is slightly less mystery


Soooo, Cobol. (urk / flinch)

But here I am open to suggestion - and school breaks for the next
two weeks so perhaps assembly (with the proper tutor) would
be approachable enough.
Post by Gerhard Postpischil
CoBOL doesn't know 3270s from a hole in the ground; however, it
is frequently used with CICS because it makes transaction
writing fairly simple, and leaves all the dirty work to CICS.
There is a TSO application called KICKS that's still a work in
progress, that might do most of the work for you. CICS also
works with PL/I, but I don't know whether KICKS supports it.
I looked at the KICKs website and it seemed that the first rule
of KICKs is you don't talk about KICKs.

I have taken a short look at the MAP3270 stuff - and it looks
interesting so far.
Post by Gerhard Postpischil
(While I was writing this, I was interrupted by a phone call,
and when I came back I noticed Mike Stramba supplied most of the
information).
For VSAM, look at Dave Cole's SCHEDULE program - you don't need
to schedule stuff, but it has a generalized VSAM I/O routine
that could get you started.
For this outing I think a flat file is going to be fine..Don't want to drag
too
many of the worms out of the can at once.

NAME PIC X(20)
STREET PIC X(20)
CITY PIC X(13)
STATE PIC X(02)
ZIP PIC X(05)
CONTACT PIC X(12)

Total record 72 chars.
coincidence? I think not.
Post by Gerhard Postpischil
For 3270, I looked at FSI, but have never tried it, as I prefer
to use my own code. The big hitch is learning how the display
hardware works, and writing code that is not locked into the
default 24*80 size.
yikes, hadn't even thought of that - I only use 24x80 3270s so I can
get nice BIG letters..

What would you have to do, proportionally place everything rather
than have a static format you could just throw at the screen?
Post by Gerhard Postpischil
Gerhard Postpischil
Bradford, VT
Gerhard Postpischil
2010-05-24 00:41:06 UTC
Permalink
Post by Ron Hudson
What would you have to do, proportionally place everything rather
than have a static format you could just throw at the screen?
It depends. For many applications, you can retain 80 charter
lines, but write as many as the session has (24, 32, 43 for
models 2-4, 27 for model 5, 52 for 3290). Custom sizes are also
possible, but at this point you do not want to get involved with
that. Some other functions (e.g, a storage display) can check
the screen width and adapt on the fly.

For planning, the basic thing to remember is that distinct
fields (input or output) require one extra byte on the display
to define the characteristics, so your six fields of length 72
actually would need 78 spaces per line. To make life
interesting, the display does not match the buffer; e.g.,
defining a field requires a minimum of two bytes (Start Field
order + attributes: input, output, non-display), and may have
more to define color and high-lighting, etc. And you need to
worry about cursor management - will you always position the
cursor to the same field, or will it vary depending on what the
user does or doesn't type in. There is enough interesting stuff
to learn to keep you busy all summer, and then some. The "bible"
for this is the IBM - 3270 Data Stream Prgm. Ref. (GA23-0059-07)

http://www-01.ibm.com/support/docview.wss?uid=pub1ga23005907



Gerhard Postpischil
Bradford, VT
Mike Stramba
2010-05-24 00:59:05 UTC
Permalink
Heh heh , and that's *just* the 3270 stuff ... VSAM is good for a few
months of study ... getting it all working, another few months ...

Computer + software = time machine (time absorber)

On Sun, May 23, 2010 at 8:41 PM, Gerhard Postpischil
There is enough interesting stuff to learn to keep you busy all summer, and
then some. The "bible" for this is the IBM - 3270 Data Stream Prgm. Ref.
(GA23-0059-07)
http://www-01.ibm.com/support/docview.wss?uid=pub1ga23005907
Ron Hudson
2010-05-24 01:35:03 UTC
Permalink
Post by Mike Stramba
Heh heh , and that's *just* the 3270 stuff ... VSAM is good for a few
months of study ... getting it all working, another few months ...
Computer + software = time machine (time absorber)
There is enough interesting stuff to learn to keep you busy all summer,
and then some. The "bible" for this is the IBM - 3270 Data Stream Prgm. Ref.
(GA23-0059-07)
http://www-01.ibm.com/support/docview.wss?uid=pub1ga23005907
I got the .BOO file = some sort of offline book reader. I also found the
link to the online version.
Tony Harminc
2010-05-24 01:40:45 UTC
Permalink
I got the .BOO file = some sort of offline book reader. I also found the link to the online version.
This is the reader program (available for Windows and Linux):

http://www-01.ibm.com/software/applications/office/bkmgr/softcopyread.html

Tony H.
Rick Fochtman
2010-05-24 19:19:07 UTC
Permalink
-------------------------------------<snip>----------------------------
I got the .BOO file = some sort of offline book reader. I also found the
link to the online version.
-------------------------------------<unsnip>-----------------------------
That file is designed for BookManager READ. It's a nice product, with a
very good search engine for searching a book or an entire bookshelf. But
it DOES take some getting used to. If you can find the same file in an
Adobe Acrobat file, it'll be easier to digest, at least in the short term.

Rick
mfnoel
2010-05-24 16:26:58 UTC
Permalink
I think most would agree the 'classic' way to build a a full screen business application (like a contact list) on the mainframe is to use COBOL/VSAM/CICS. Unfortunately IBM won't license CICS for hercules use, but my KICKS package (see http://home.gci.net/~mike-noel/KICKS/KooKbooK/KooKbooK.htm) is very similar.

You can get a copy of "COBOL for the CICS Programmer" on ebay (such as http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=390197284759) for about a dollar, and KICKS includes many of the examples in that book. KICKS is free for hobbyist use and supports hundreds of users sharing vsam files on a turkey mvs system.
Post by Ron Hudson
Hey everyone,
Time for the next great leap forward! I want to write a simple full screen
application..
One that keeps a contact list perhaps....
What language would be best for this?
I am guessing Cobol as I have heard it associated with
full screen apps.
Ron
Ron Hudson
2010-05-24 16:54:18 UTC
Permalink
Post by mfnoel
I think most would agree the 'classic' way to build a a full screen
business application (like a contact list) on the mainframe is to use
COBOL/VSAM/CICS. Unfortunately IBM won't license CICS for hercules use,
4. TRADE SECRET. KICKS is trade secret material and licensee must not
divulge it, *including public comments regarding its usability, its
reliability or its performance*.

The first rule of KICKS is 'one does not talk about KICKS'

I can understand not saying how any internal works in KICKs, but I can't say
anything about my own non technical opinions? If I have a problem using
KICKs, I can't say anything? I think the above might even preclude me from
seeking help in using KICKs from other people in the turnkey-mvs group.
(under usability)

I may be misunderstanding your agreement or your intentions. Please clarify
them.
mfnoel
2010-05-24 17:17:28 UTC
Permalink
You are welcome to discuss any of your technical concerns or problems with KICKS in the KICKS forum for licensed users (http://tech.groups.yahoo.com/group/kicksfortheturnkey).

You are correct that you should not discuss such in this forum.

I don't normally post to this forum unless it's in response to another post or it's of broader interest than just KICKS -- for example I recently posted regarding getting hundreds of tso users running under the turkey. The tso workload I used was KICKS but that's actually incidental.
Post by Ron Hudson
Post by mfnoel
I think most would agree the 'classic' way to build a a full screen
business application (like a contact list) on the mainframe is to use
COBOL/VSAM/CICS. Unfortunately IBM won't license CICS for hercules use,
4. TRADE SECRET. KICKS is trade secret material and licensee must not
divulge it, *including public comments regarding its usability, its
reliability or its performance*.
The first rule of KICKS is 'one does not talk about KICKS'
I can understand not saying how any internal works in KICKs, but I can't say
anything about my own non technical opinions? If I have a problem using
KICKs, I can't say anything? I think the above might even preclude me from
seeking help in using KICKs from other people in the turnkey-mvs group.
(under usability)
I may be misunderstanding your agreement or your intentions. Please clarify
them.
Carlos Aguilera
2010-05-24 16:49:42 UTC
Permalink
Yes, but where we can get Kicks?????



Carlos Aguilera

1401 Liggates Rd

Lynchburg VA 24502

Carlos-FiVMtmHp2a9Wk0Htik3J/***@public.gmane.org

434-401-4828
Carlos Aguilera
2010-05-24 17:00:42 UTC
Permalink
Well; what are you saying; Is it vaporware?



I would like to develop applications based on the subject.



Carlos Aguilera

1401 Liggates Rd

Lynchburg VA 24502

Carlos-FiVMtmHp2a9Wk0Htik3J/***@public.gmane.org

434-401-4828
Ron Hudson
2010-05-24 17:12:23 UTC
Permalink
Not at all - Its available on Mike Noel's website

http://home.gci.net/~mike-noel/KICKS/<http://home.gci.net/%7Emike-noel/KICKS/>
Post by Carlos Aguilera
Well; what are you saying; Is it vaporware?
I would like to develop applications based on the subject.
Carlos Aguilera
1401 Liggates Rd
Lynchburg VA 24502
434-401-4828
Carlos Aguilera
2010-05-24 17:35:26 UTC
Permalink
No it is not; there are not available links to download it.



Check again.



Carlos Aguilera

1401 Liggates Rd

Lynchburg VA 24502

Carlos-FiVMtmHp2a9Wk0Htik3J/***@public.gmane.org

434-401-4828
Kevin Monceaux
2010-05-24 17:56:27 UTC
Permalink
Carlos,
Post by Carlos Aguilera
No it is not; there are not available links to download it.
Check again.
I checked again. There's a download link in the menu on the left hand side
that points to:

http://home.gci.net/~mike-noel/KICKS/kicks-download.htm

And, that page lists the link for the current version, which at the moment
is:

http://www.noelalaska.com/cgi-bin/kicks-v1r0m0/kicks.pl

That link takes one to a registration page, which caused me to not bother
with trying KICKS for quite a while. Curiosity finally got the better of me
and I registered so I could give KICKS a try. If one registers at the above
page, they'll receive the actual download link via an e-mail.

Between the registration/licensing hassle and the unnatural feel with it
running under TSO I doubt I'll do much with it. With a proper CICS clone
one should be able to do things like close individual files to run batch
jobs without having to shut the CICS clone down, sign on to multiple
sessions with the same user ID, etc.
Post by Carlos Aguilera
From some of the recent discussion I've seen here it looks like I might be
in violation of the license by talking about KICKS here. Oh well, if my
license gets revoked, I guess I can live with that. It's beginning to seem
like it's more trouble than it's worth.
--
Kevin
http://www.RawFedDogs.net
http://www.WacoAgilityGroup.org
Bruceville, TX

What's the definition of a legacy system? One that works!
Errare humanum est, ignoscere caninum.
mfnoel
2010-05-24 18:07:26 UTC
Permalink
Sorry to hear you don't like it. Obviously there are MANY things KICKS should do that it doesn't (at least not yet). Another major "feature" missing from KICKS is it does not cost thousands of dollars a month...
Post by Kevin Monceaux
Carlos,
Post by Carlos Aguilera
No it is not; there are not available links to download it.
Check again.
I checked again. There's a download link in the menu on the left hand side
http://home.gci.net/~mike-noel/KICKS/kicks-download.htm
And, that page lists the link for the current version, which at the moment
http://www.noelalaska.com/cgi-bin/kicks-v1r0m0/kicks.pl
That link takes one to a registration page, which caused me to not bother
with trying KICKS for quite a while. Curiosity finally got the better of me
and I registered so I could give KICKS a try. If one registers at the above
page, they'll receive the actual download link via an e-mail.
Between the registration/licensing hassle and the unnatural feel with it
running under TSO I doubt I'll do much with it. With a proper CICS clone
one should be able to do things like close individual files to run batch
jobs without having to shut the CICS clone down, sign on to multiple
sessions with the same user ID, etc.
From some of the recent discussion I've seen here it looks like I might be
in violation of the license by talking about KICKS here. Oh well, if my
license gets revoked, I guess I can live with that. It's beginning to seem
like it's more trouble than it's worth.
--
Kevin
http://www.RawFedDogs.net
http://www.WacoAgilityGroup.org
Bruceville, TX
What's the definition of a legacy system? One that works!
Errare humanum est, ignoscere caninum.
mfnoel
2010-06-03 15:39:43 UTC
Permalink
BTW, KICKS already does this, automaticially! Files are closed expect when a transaction is actually using them, so a batch job can do open/read/write/close as it wants and if a KICKS transaction comes along while that's going on the transaction just gets a "not open" abend as it would in real CICS if you had closed the file. Except in KICKS you don't have to remember to manually CLOSE the file, nor to manually OPEN the file again when your batch job finishes, 'cause KICKS just handles it.

Of course you still might want to temporarily shutdown KICKS and prevent further KICKS logons (while allowing normal TSO use), just as you sometimes need to actually shutdown real CICS, and KICKS provides a simple procedure to accomplish this as well.

--- In turnkey-mvs-***@public.gmane.org, Kevin Monceaux <***@...> wrote:
... a proper CICS clone should be able to do things like close individual files to run batch jobs without having to shut the CICS clone down, ...
mfnoel
2010-05-24 18:00:31 UTC
Permalink
Just checked, all the download stuff seems in order.

1. go to http://home.gci.net/~mike-noel/KICKS
2. on the left, select "Download"
3. near the bottom of the next screen you should see "3/17/2010 - release V1R0M1 with KEDF preview (a bit over 2 megs)". Click that.
4. at the bottom of the next screen click the "I accept" button to accept my license terms (but please read them first!).
5. on the next screen fill in your contact info and click the "submit" button.
6. an email with a download link will be sent to the address you gave in step 5. If it doesn't show up in a few minutes check to see if your spam trap got it.
7. click on the download link in the email and KICKS should download to your machine.

Install KICKS and enjoy!

If you want to join the KICKS support forum follow the usual Yahoo procedure after you've downloaded KICKS.
Post by Carlos Aguilera
No it is not; there are not available links to download it.
Check again.
Carlos Aguilera
1401 Liggates Rd
Lynchburg VA 24502
434-401-4828
Rick Fochtman
2010-05-24 19:30:20 UTC
Permalink
-----------------------------------<snip>--------------------------------
Post by Ron Hudson
Hey everyone,
Time for the next great leap forward! I want to write a simple full
screen application..
One that keeps a contact list perhaps....
What language would be best for this?
I am guessing Cobol as I have heard it associated with full screen apps.
------------------------------<unsnip>-------------------------------
That's a mighty big chunk to bite off at once. COBOL, as well as the
other high-level languages, has no direct access to full-screen
facilities. In short, COBOL knows nothing about tubes. You'll need some
Assembler subroutines, at the very least, just to "paint" a full screen
and that's assuming that you know the screen geometry. I'm attaching a
simple-minded line-mode TSO app, in Assembler.

The Data Management is a simple VSAM issue, but it's going to take some
serious study and PLAN on making mistakes; VSAM is NOT for the meek. As
I've said before, I'll help as much as I can.

Rick
Ron Hudson
2010-05-24 21:49:58 UTC
Permalink
Post by Rick Fochtman
That's a mighty big chunk to bite off at once. COBOL, as well as the
other high-level languages, has no direct access to full-screen facilities.
In short, COBOL knows nothing about tubes. You'll need some Assembler
subroutines, at the very least, just to "paint" a full screen and that's
assuming that you know the screen geometry. I'm attaching a simple-minded
line-mode TSO app, in Assembler.
The Data Management is a simple VSAM issue, but it's going to take some
serious study and PLAN on making mistakes; VSAM is NOT for the meek. As I've
said before, I'll help as much as I can.
Rick
Thanks Rick..
Right now I am playing at just displaying a screen with some protected and
unprotected areas..

Ron.
Carlos Aguilera
2010-05-25 11:45:42 UTC
Permalink
Ron:



See this page, it may help you:





http://docs.hp.com/en/30293-90009/apc.html





Carlos Aguilera

1401 Liggates Rd

Lynchburg VA 24502

Carlos-FiVMtmHp2a9Wk0Htik3J/***@public.gmane.org

434-401-4828
Loading...