Commit ffb113de authored by rdubner's avatar rdubner

Merging Solaris branch into master

parents 1786119d 1318ab5d
2020-11-21 Bob Dubner <rdubner@symas.com>
* Released Version 4.6
* Changes for proper operation on Solaris/SPARC, handling the big-endian architecture
and 64-bit addresses that look like negative numbers.
2020-11-18 Bob Dubner <rdubner@symas.com>
* Released Version 4.5
......
......@@ -7,6 +7,12 @@
##
## Usage is version-replace in-file version.h
SED=sed
if echo $(uname -o) | grep -qi solaris
then
SED=gsed
fi
if ! test -f $1 ; then
echo "Couldn't find the target file $1"
exit 1
......@@ -27,7 +33,7 @@ while read -r line
## Find the line in question:
if test X"${arrIN[0]}" == X"#define" && test X"${arrIN[1]}" == X"VERSION" ; then
# Remove the leading and trailing double-quotes:
VERSION=$(sed -e 's/^"//' -e 's/"$//' <<<"${arrIN[2]}")
VERSION=$($SED -e 's/^"//' -e 's/"$//' <<<"${arrIN[2]}")
fi
done < "$input"
......@@ -36,5 +42,5 @@ VERSION_STRING='[Version '$VERSION']'
## We need to replace the existing out-of-date version string
## with our new one
echo Updating $1 to $VERSION_STRING
sed -i -r "s/[[]Version.*[]]/$VERSION_STRING/g" $1
$SED -i -r "s/[[]Version.*[]]/$VERSION_STRING/g" $1
......@@ -211,7 +211,7 @@ def Main() :
## The text "Version x.x" has to appear in square brackets. #
## Don't mess with it! #
###########################################################################
SCRIPT_VERSION="[Version 4.5]"
SCRIPT_VERSION="[Version 4.6]"
SHOW_TIME = True # For timing analysis. Won't work on Python2
SHOW_TIME = False
......@@ -223,6 +223,7 @@ def Main() :
EXE_SUFFIX = ""
SO_SOFFIX = ".so"
os_name = platform.system()
processor = platform.processor()
if os_name == "Windows" or os_name.find("MINGW") != -1 :
windows = True
EXE_SUFFIX = ".exe"
......@@ -308,8 +309,8 @@ def Main() :
DASH_F="-f"
DASH_S=""
if windows :
## and in Windows, neither works:
if windows or os_name == "SunOS" :
## and in Windows and Solaris, neither works:
DASH_F=""
DASH_S=""
......@@ -689,6 +690,7 @@ def Main() :
if resultcode == 0 :
if ECHO :
print("os_name is ",os_name )
print("processor is ",processor )
print("SCRIPTDIR is ",SCRIPTDIR )
#print("COBCDEVEL is ",COBCDEVEL )
print("COBC is ",COBC )
......@@ -706,8 +708,8 @@ def Main() :
print("TARGET is ",TARGET )
print("TMPDIR is ",TMPDIR )
print("TMP is ",TMP )
#print("DASH_F is ",DASH_F )
#print("DASH_S is ",DASH_S )
print("DASH_F is ",DASH_F )
print("DASH_S is ",DASH_S )
if resultcode == 0 :
## Do the initial compilation that gives us the .c .h .i and .s files
......@@ -829,7 +831,7 @@ def Main() :
## the Python extension be in the same directory as the
## executable, suitably renamed.
if windows :
if windows or os_name == "SunOS" :
DEST = TARGET
DEST = TARGET.split('/')[0:-1]
DEST.append(TARGET+"-gdb.py")
......
......@@ -44,13 +44,17 @@
#include <stdio.h>
#include <string.h>
#ifndef __sun
#include "getopt.h"
#endif
int opterr = 1, /* if error message should be printed */
optind = 1, /* index into parent argv vector */
optopt, /* character checked for validity */
optreset = 0; /* reset getopt */
#ifndef __sun
char const * optarg; /* argument associated with option */
#endif
#undef BADCH
#define BADCH (int)'?'
......@@ -101,7 +105,7 @@ getopt(int nargc, char * const * nargv, const char * ostr)
} else {
/* need an argument */
if (*place) /* no white space */
optarg = place;
optarg = (char *)place;
else if (nargc <= ++optind) { /* no arg */
place = EMSG;
if (*ostr == ':')
......
......@@ -133,11 +133,17 @@ FindFunctionReferences(WHOLEFILE &fd)
}
}
if( strstr(ach,"@function") ) {
if( strstr(ach,"function") ) {
string s = ach;
VSTRING tokens = Split(s,"\t ");
if( tokens[3] EQ "@function" ) {
cheating.insert(nline+3); // This is where our synthetic .loc will go
if( tokens[3] EQ "@function") {
cheating.insert(nline+3); // This is where our synthetic .loc will go; Intel assembly
}
if( tokens[3] EQ "%function") {
cheating.insert(nline+3); // This is where our synthetic .loc will go; ARM assembly
}
if( tokens[3] EQ "#function" ) {
cheating.insert(nline+4); // This is where our synthetic .loc will go; SPARC assembly
}
}
nline += 1;
......@@ -284,6 +290,8 @@ build(PARAMETERS &params,
// We have learned that the GDB trapping can get confused if there isn't
// a .loc reference in the first few lines after a function declaration.
// This is particularly a problem with GDB-9; GDB-8 seems to be less finicky.
// When we created the function_references array, we added the offset we
// need to put a .loc into the right place. So, when i = function_references,
// it's time to put a .loc in.
......
......@@ -44,13 +44,17 @@
#include <stdio.h>
#include <string.h>
#ifndef __sun
#include "getopt.h"
#endif
int opterr = 1, /* if error message should be printed */
optind = 1, /* index into parent argv vector */
optopt, /* character checked for validity */
optreset = 0; /* reset getopt */
#ifndef __sun
char const * optarg; /* argument associated with option */
#endif
#undef BADCH
#define BADCH (int)'?'
......@@ -101,7 +105,7 @@ getopt(int nargc, char * const * nargv, const char * ostr)
} else {
/* need an argument */
if (*place) /* no white space */
optarg = place;
optarg = (char *)place;
else if (nargc <= ++optind) { /* no arg */
place = EMSG;
if (*ostr == ':')
......
......@@ -7,7 +7,7 @@ SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
::## Don't mess with it! #
::###########################################################################
::
set VERSION=[Version 4.5]
set VERSION=[Version 4.6]
::
::
:: Stupendously useful:
......
......@@ -4,4 +4,4 @@
// On the Unix side, there is scripting trickery to propogate this version
// code into cobcd.py and the names of packages when they are created.
#define VERSION "4.5"
#define VERSION "4.6"
......@@ -4,9 +4,6 @@ project=cobcd.py
prefix ?=/usr/local
AUTO_LOAD_FOUND := $(shell grep -s -e "^[ \t]*set auto-load safe-path /" ~/.gdbinit | wc -l)
AUTO_SCRIPTS_FOUND := $(shell grep -s -e "^[ \t]*set auto-load python-scripts on" ~/.gdbinit | wc -l)
.PHONY: all
all : cobcd.py
......
......@@ -165,11 +165,15 @@ class GlobalVariables() :
## Establish the debugging verbosity level:
self.debug_level = int(os.environ.get('CPRINT_D','0'))
## Let's figure out if we are a 32-bit or 64-bit machine:
## Let's figure out some stuff about the environment
self.SizeofPointer = calcsize('P') # Returns 4 or 8
self.byteorder = sys.byteorder # Returns "big" or "little"
self.SizeofInt = ctypes.sizeof(ctypes.c_int) # Returns size of C-side int
## Establish the size of a c-side int
self.SizeofInt = ctypes.sizeof(ctypes.c_int)
if self.debug_level >= 1 :
print("#### SizeofPointer",self.SizeofPointer)
print("#### byteorder",self.byteorder)
print("#### SizeofInt",self.SizeofInt)
self.libcob_loaded = False # Goes true when the library is loaded
self.cob_current_module_valid = False # This can take a while to go true after libcob is available
......@@ -654,7 +658,9 @@ def GetDataAt(address,bytes) :
else :
return None
command = "x/1" + u + "d " + str(address)
## When an integer is long enough, Python appends a 'L' to the hex
## number. This came up in SPARC, with addresses like 0xffffffff7b407700
command = "x/1" + u + "u " + hex(address).replace('L','')
value_back = GdbExecute(currentframe(),command)
nfound = value_back.find(":")
......@@ -704,27 +710,25 @@ def GetPointerAt(variable) :
return None
def GetAddressOf(variable) :
# Use this form when you know variable is the name of a block.
# Use this routine when you know variable is the name of a block.
retval = None
if variable :
try :
command = "info address " + variable
address_string = GdbExecute(currentframe(),command)
val_info = ExtractHexValueFrom(address_string)
retval = ExtractHexValueFrom(address_string)
except gdb.error:
val_info = None
retval = None
try :
command = "x/1db " + variable ## Notice d for decimal, not hex, because
## a second 0x messes up ExtractHexValue
address_string = GdbExecute(currentframe(),command)
val_x1db = ExtractHexValueFrom(address_string)
except :
val_x1db = None
if not retval :
try :
command = "x/1db " + variable ## Notice d for decimal, not hex, because
## a second 0x messes up ExtractHexValue
address_string = GdbExecute(currentframe(),command)
retval = ExtractHexValueFrom(address_string)
except :
retval = None
retval = val_x1db
if val_x1db == None :
retval = val_info
return retval
def AddEmUp(expression) :
......@@ -1342,8 +1346,11 @@ class CobolVariable() :
retval = "0x"
output_bytes = self.data[:]
if (self.AttrFlags & COB_FLAG_BINARY_SWAP) != 0 :
output_bytes.reverse()
if GV_GlobalVariables.byteorder == "little" :
if (self.AttrFlags & COB_FLAG_BINARY_SWAP) == 0 : # If this is ON, then it is already in display order
if (self.AttrFlags & (COB_FLAG_REAL_BINARY | COB_FLAG_IS_POINTER | COB_FLAG_IS_FP )) != 0 :
# These three types are little-endian; flip them so they display with the big byte to the left
output_bytes.reverse()
for byte in output_bytes :
hexout = hex(byte)[-2:]
if hexout[0:1] == 'x' :
......@@ -1638,20 +1645,14 @@ class CobolVariable() :
print("data: (HEX) [" , end= " ")
## At this point, if BINARY_SWAP is on, our data are reversed.
## We want to unreverse them for this display:
output_bytes = self.data[:]
if (self.AttrFlags & COB_FLAG_BINARY_SWAP) != 0 :
output_bytes.reverse()
for byte in output_bytes :
for byte in self.data :
hexout = hex(byte)[-2:]
if hexout[0:1] == 'x' :
hexout = '0' + hexout[-1:]
print(hexout,end=" ")
print("]")
print("data: (ASCII) \"", end = "")
for byte in output_bytes :
for byte in self.data :
if 32 <= byte < 128 : # valid ASCII characters
print(chr(byte),end="")
else :
......@@ -2456,7 +2457,7 @@ class CPrint (gdb.Command) :
actual_command = "print"
if self.Worker.use_cprint == 1 :
actual_command = "cprint"
print('registering CPrint (Usage is "' + actual_command + ' <COBOL identifier>") [Version 4.5]')
print('Registering CPrint (Usage is "' + actual_command + ' <COBOL identifier>") [Version 4.6]')
super (CPrint, self).__init__ (actual_command, gdb.COMMAND_USER)
def invoke (self, arguments, from_tty):
......@@ -2483,7 +2484,7 @@ class CWatch (gdb.Command) :
def __init__ (self):
super (CWatch, self).__init__ ("cwatch", gdb.COMMAND_USER)
print('registering CWatch (Usage is "cwatch <COBOL identifier>")')
print('Registering CWatch (Usage is "cwatch <COBOL identifier>")')
self.Worker = CWatchWorker()
self.TabFile = TabFileInformation();
......
......@@ -3,3 +3,4 @@ test
known-good.txt
under-test.txt
under-test.stripped
*.py
#!/usr/bin/python3
from __future__ import print_function
import sys
import re
import os
def main() :
if len(sys.argv) > 1 :
......@@ -14,8 +17,20 @@ def main() :
in_print_count = 0
in_call_count = 0
f = open(sys.argv[1], "r")
whole_file = f.read()
f=open(sys.argv[1],"rb")
whole_file_x = f.read()
f.close()
whole_file = ""
if sys.version[0] == '2' :
for ch in whole_file_x :
if ord(ch) < 128 :
whole_file += ch
else :
for ch in whole_file_x :
if ch < 128 :
whole_file += chr(ch)
whole_file.replace('\r','') # Windows. Always Windows
lines = whole_file.split('\n')
......@@ -71,7 +86,7 @@ def main() :
## In general, when a process ends, it puts up a message like this:
## [Inferior 1 (process 14969) exited normally]
## Let's replace the process number with "99999"
p = re.compile( '(^.*process )([0-9]+)(.*$)' )
p = re.compile( '(^.*process )([0-9]+[ ]*)(.*$)' )
m = p.match(line)
if m :
print(m.group(1) + "99999" + m.group(3))
......@@ -96,7 +111,15 @@ def main() :
print_this_line = False
if print_this_line :
if line.find("Missing separate ") == 0 :
if line.find("Registering ") == 0 :
print_this_line = False
if print_this_line :
if line.find("[New Thread ") == 0 :
print_this_line = False
if print_this_line :
if line.find("[Switching ") == 0 :
print_this_line = False
if print_this_line :
......
......@@ -71,7 +71,11 @@ KNOWN GOOD START
15 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : ".........."
16 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : "."
17 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : ".........."
18 : 01 WS-FLOATTEST/JIMBOB [W-S] : 0
18 : 01 WS-BOB/JIMBOB [W-S] : '.' <repeats 22 times>
19 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : ".........."
20 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "."
21 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : ".........."
22 : 01 WS-FLOATTEST/JIMBOB [W-S] : 0
1 : 01 GEORGE/test [L-S] : ' ' <repeats 13 times>, "GEORGE "
2 : 02 NAME-FIRST/GEORGE/test [L-S] : "GEORGE "
3 : 01 WASHINGTON/test [L-S] : ' ' <repeats 23 times>, "WASHINGTONDC HOT "
......@@ -95,10 +99,10 @@ KNOWN GOOD START
7 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
8 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
9 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
10 : 01 WS-BOB/JIMBOB [W-S] : '.' <repeats 22 times>
11 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : ".........."
12 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "."
13 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : ".........."
10 : 01 WS-BOB/JIMBOB [W-S] : ' ' <repeats 22 times>
11 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : " "
12 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : " "
13 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : " "
14 : 01 WS-JUDY/JIMBOB [W-S] : "Judy L Ruderman "
15 : 02 WS-FIRSTNAME/WS-JUDY/JIMBOB [W-S] : "Judy "
16 : 02 WS-MIDDLE-INITIAL/WS-JUDY/JIMBOB [W-S] : "L"
......@@ -111,10 +115,10 @@ KNOWN GOOD START
3 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
4 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
5 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
6 : 01 WS-BOB/JIMBOB [W-S] : '.' <repeats 22 times>
7 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : ".........."
8 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "."
9 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : ".........."
6 : 01 WS-BOB/JIMBOB [W-S] : ' ' <repeats 22 times>
7 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : " "
8 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : " "
9 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : " "
10 : 02 WS-FIRSTNAME/WS-JUDY/JIMBOB [W-S] : "Judy "
11 : 02 WS-MIDDLE-INITIAL/WS-JUDY/JIMBOB [W-S] : "L"
12 : 02 WS-LASTNAME/WS-JUDY/JIMBOB [W-S] : "Ruderman "
......@@ -393,7 +397,11 @@ entering: jimbob
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
......@@ -403,7 +411,11 @@ entering: jim
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
......@@ -413,7 +425,11 @@ James " Lowden
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
......@@ -423,7 +439,11 @@ by pargraphs:
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
97 ParaFirstName. DISPLAY WS-FIRSTNAME OF WS-JIM.
......@@ -431,11 +451,18 @@ by pargraphs:
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
James
89 PERFORM ParaMiddleInitial.
......@@ -443,22 +470,36 @@ James
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
98 ParaMiddleInitial. DISPLAY WS-MIDDLE-INITIAL OF WS-JIM.
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
"
90 PERFORM ParaLastName.
......@@ -466,22 +507,36 @@ James
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
99 ParaLastName. DISPLAY WS-LASTNAME OF WS-JIM.
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
Lowden
91 DISPLAY "by threw"
......@@ -489,11 +544,18 @@ Lowden
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
by threw
92 PERFORM ParaFirstName THRU ParaLastName.
......@@ -501,21 +563,34 @@ by threw
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
5 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
97 ParaFirstName. DISPLAY WS-FIRSTNAME OF WS-JIM.
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
James
98 ParaMiddleInitial. DISPLAY WS-MIDDLE-INITIAL OF WS-JIM.
......@@ -523,11 +598,18 @@ James
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
"
99 ParaLastName. DISPLAY WS-LASTNAME OF WS-JIM.
......@@ -535,11 +617,18 @@ James
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
Lowden
93 DISPLAY "by sekshun:"
......@@ -547,11 +636,18 @@ Lowden
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
7 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
by sekshun:
94 PERFORM FirstMiddleLast.
......@@ -559,22 +655,36 @@ by sekshun:
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
5 : 01 WS-BOB/JIMBOB [W-S] : "Robert J Dubner "
6 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
7 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"
8 : 02 WS-LASTNAME/WS-BOB/JIMBOB [W-S] : "Dubner "
9 : 01 WS-FLOATTEST/JIMBOB [W-S] : 1.234
1 : 01 WS-JIM/JIMBOB [W-S] : "James " Lowden "
2 : 02 WS-FIRSTNAME/WS-JIM/JIMBOB [W-S] : "James "
3 : 02 WS-MIDDLE-INITIAL/WS-JIM/JIMBOB [W-S] : """
4 : 02 WS-LASTNAME/WS-JIM/JIMBOB [W-S] : "Lowden "
5 : 02 WS-FIRSTNAME/WS-BOB/JIMBOB [W-S] : "Robert "
6 : 02 WS-MIDDLE-INITIAL/WS-BOB/JIMBOB [W-S] : "J"