Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations gkittelson on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

using perform until

Status
Not open for further replies.

Guest_imported

New member
Jan 1, 1970
0
Using the perform varying statement.

perform b0001-read thru b001-exit
varying 1 by 1 until >= 200.

What if I have anywhere from 4 to 200 records and I want to display on the screen the first 11 records, then if there are more than 11 records, I want to display those next 11 records. How would I do that with the perform varying statement???
 
Something like this:
01 eof-flag pic x value 'n'.
88 not-end-of-file value 'n'.
88 end-of-file value 'y'.
Perform 1000-read thru 1000-exit
varying r from 1 by 1
until end-of-file
or r > 200.
1000-read.
read input-file
at end move 'y' to eof-flag.
if not-end-of-file
perform 2000-whatever.
1000-exit.
2000-whatever.
do whatever 11th-record display logic you want to.
 
bead2
What kind of file are you reading? Is it indexed? Will you be sending the screens in separate transactions? That is, the operator will see 11 records on a screen, and then do something to request the next 11? Are you using CICS or something else? Do you really want to stop at 200, even if there happen to be more records? Need ALL of this info to tell you how to proceed.
Quite frankly, you may need only a PERFORM ... UNTIL, rather than a PERFORM ... VARYING. And, in any event, your code will not compile at all, since you have TWO errors, both of which have been corrected by idnonada.

Stephen J Spiro
Member, J4 COBOL Standards Committee
check it out at
and

stephenjspiro at hotmail.com
 
Here's another version idnonada's code using an in-line PERFORM:

READ INPUT-FILE INTO DISPLAY-REC (1).
MOVE 1 TO DISPLAY-TEST.
PERFORM VARYING R FROM 1 BY 1
UNTIL INPUT-FILE-STATUS = '10' OR R > 200
IF DISPLAY-TEST = 11
PERFORM VARYING DISPLAY-TEST FROM 1 BY 1
UNTIL DISPLAY-TEST > 11
DISPLAY DISPLAY-REC (DISPLAY-TEST)
MOVE SPACE TO DISPLAY-REC (DISPLAY-TEST)
END-PERFORM
MOVE ZERO TO DISPLAY-TEST
END-IF
ADD 1 TO DISPLAY-TEST
READ INPUT-FILE INTO DISPLAY-REC (DISPLAY-TEST)
END-PERFORM.
IF DISPLAY-TEST > 1
PERFORM VARYING DISPLAY-TEST FROM 1 BY 1
UNTIL DISPLAY-TEST > 11
DISPLAY DISPLAY-REC (DISPLAY-TEST)
END-PERFORM
END-IF.

Of course, I only included include the VARYING R and the OR R > 200 because you asked for it. The code will handle any amount of records without it.

Hope this helps

Betty Scherber
Brainbench MVP for COBOL II
 
Hi Bead,

This is another case of a control break. You have a file that looks like this:

file
11 recs
11 recs
11 recs
.
.
etc.

You have a file that contains a number of 11 record groups. The following pseudo code
should give you an idea:
Code:
   perf 7000-read-ip
   if ip-eof
      display error msg, etc.
      goback
   end-if
   perf 1000-proc-input 
   untl  ip-eof
   perf 9000-end-it
   .
1000-proc-input.
   init display-tbl
   perf 2000-proc-11grp varying read-ctr from +1 by +1
   untl read-ctr > 11 or ip-eof
   perf 3000-display-a-group 
   .
2000-proc-11grp.
   read input at end set ip-eof to true end-read
   move ip-rec to display-tbl-entry(read-cntr)
   .

As Jim stated, there's no reason to limit the process to 200; ending it when the file is exhausted is probably a better idea. But, then again, we don't know your true reqs.

If you want to get an understanding of how to process a cntl break scenerio, see the FAQ here.

Regards, Jack.
 
I agree with idnonada's coding done above. Each time you read a record, load it into a working-storage holding table which can accomodate all the records which will be read.

One thing I have learned is that you sometimes have to be very careful as to when you do a PERFORM UNTIL and when you do a PERFORM VARYING. Because if I were to do a PERFORM VARYING for the first PERFORM, the table subscript would be off and not all the records would be properly displayed.

Once you have loaded your holding table, you will do another process for the actual screen display. This process will contain a nested in-line PERFORM. For the screen display, you will use a table consisting only of 11 records.

You will have to do a PERFORM UNTIL for walking through the holding table, so that the holding-sub keeps the count properly. In the DISPLAY paragraph, you do a nested PERFORM VARYING. Each time the table-sub hits 11, the in-line nested PERFORM will do a display and then add +1 to WS-TABLE-SUB (very important, or else the count will be off). Then the nested in-line PERFORM ends and the process reverts back to the paragraph doing the original PERFORM.

The holding sub will now be at number +12 and will walk through the next group of 11, and so forth, until you reach empty fields in the holding table or until you reach the holding table's max.

And because the nested PERFORM doing the display is using a PERFORM VARYING, the display-sub gets re-initialized automatically each time.

WORKING-STORAGE SECTION.
01 WS-TABLE-SUB PIC S9(04) COMP.
01 WS-DISPLAY-SUB PIC S9(02) COMP.
01 MAX-DISPLAY-CT PIC S9(2) VALUE +11.

01 WS-HOLD-TABLE.
05 WS-HOLD-REC OCCURS 10000 TIMES.
10 WS-HOLD-FIRST-FIELD PIC X(length of field).
10 WS-HOLD-SECOND-FIELD PIC X(length of field).

01 WS-DISPLAY-TABLE.
05 WS-DISPLAY-REC OCCURS 11 TIMES.
10 WS-FIRST-FIELD PIC X(length of field).
10 WS-SECOND-FIELD PIC X(length of field).

PROCEDURE DIVISION.

[Initialize, do the read-and-load-holding-table routines, etc.]

MOVE +1 TO WS-TABLE-SUB.
PERFORM 3000-DISPLAY-TABLE THRU 3000-EXIT
UNTIL WS-HOLD-REC = SPACES OR
WS-TABLE-SUB > 10000.

3000-DISPLAY-TABLE
INITIALIZE WS-DISPLAY-TABLE.
PERFORM VARYING WS-DISPLAY-SUB FROM +1 BY +1
UNTIL WS-DISPLAY-SUB > MAX-DISPLAY-CT.
MOVE WS-HOLD-REC (WS-TABLE-SUB)
TO WS-DISPLAY-REC (WS-DISPLAY-SUB)
ADD +1 TO WS-TABLE-SUB
END-PERFORM.
DISPLAY WS-DISPLAY-TABLE.

3000-EXIT.
EXIT.

Hope this helps, Nina Too

 
Actually, in my example above, the holding table should contain only 200 (or perhaps 250 to prevent table overflow and a huge S(OC) 4). Somehow I missed that you are only reading 200 records.

Nina Too
 
All of these approaches will display 200 records on the screen AT THE SAME TIME, in 11 record chunks ..... I do NOT think this will work (altho it might, depending on the environment). The questions I asked were never answered. NO-ONE's questions have been answered. We cannot give a reasonable answer without more information.

Stephen J Spiro
 
Hi Stephen,

If Bead codes the 3000- pgraph in my example with an ACCEPT after the last rec of the group is displayed, I think 11 recs will be displayed at a time. I'm not a PC type, but I've seen the ACCEPT used to continue pgm execution.

Regards, Jack.
 
I am using microfocus COBOL, a sequential file that reads in a indexed file. I sort the file the ask if the user input of lastname = lastname in the file, if it does then I move it into a table. I want to access those records from the table and display 11 of those records (on screen) at a time with a mmessage stating to see the next 11 records. I have the

perform name-idx varying 1 by 1 until name-idx = 200.
 
I using an interactive input screen and printing the data on the output screen (as below).


NAME-TABLE-DATA.
05 NAME-TABLE OCCURS 300 TIMES
indexed by name-idx.
10 NT-LNAME PIC X(20).
10 NT-FNAME PIC X(14).
10 FILLER PIC X(01).
10 NT-HHLNAME PIC X(20).
10 NT-HHFNAME PIC X(14).
10 FILLER PIC X(01).
10 NT-HHID PIC 9(09).

screen-section.
SCREENS*************************
01 SCREEN-NAME-OUT AUTO.
02 BACKGROUND-COLOR 5 FOREGROUND-COLOR 3.
03 BLANK SCREEN.
03 LINE 2 COL 20 HIGHLIGHT VALUE "SEARCH".
03 COL 27 HIGHLIGHT VALUE "RESULTS FOR LAST NAME:".
03 COL 50 BACKGROUND-COLOR 2 FOREGROUND-COLOR 4
PIC X(20) FROM SI-LNAME.
03 LINE 3 COL 1 HIGHLIGHT VALUE "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
-"ÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍ»".
03 LINE 4 COL 1 HIGHLIGHT VALUE "º".
03 COL 15 HIGHLIGHT VALUE "NAME".
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 45 HIGHLIGHT VALUE "HEAD".
03 COL 50 HIGHLIGHT VALUE "OF".
03 COL 53 HIGHLIGHT VALUE "HOUSEHOLD".
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 74 HIGHLIGHT VALUE "HH-ID".
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 5 COL 1 HIGHLIGHT VALUE "ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
-"ÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÍÍ͹".
03 LINE 6 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 7 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 8 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 9 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 10 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 11 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 12 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 13 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 14 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 15 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 16 COL 1 HIGHLIGHT VALUE "º".
03 COL 2 PIC X(20) FROM NT-LNAME(NAME-IDX).
03 COL 23 PIC X(14) FROM NT-FNAME(NAME-IDX).
03 COL 35 HIGHLIGHT VALUE "º".
03 COL 36 PIC X(20) FROM NT-HHLNAME(NAME-IDX).
03 COL 70 HIGHLIGHT VALUE "º".
03 COL 71 PIC 9(09) FROM NT-HHID(NAME-IDX).
03 COL 80 HIGHLIGHT VALUE "º".
03 LINE 17 COL 1 HIGHLIGHT VALUE "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
-"ÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍͼ".

 
This is in addition to the above message statement. I am reading the input file, then if user input last name = file's last name then I am moving it to the table. I then want to display those matching last names on the screen.
 
So you basically want a &quot;scrolling&quot; sort of operation, i.e. display the first 11 and then, when the user hits <enter>, display the next 11, and so forth.

I'm not completely sure how Microfocus COBOL works. But I'll give a general way on how this could be done using CICS (because I'm more of a CICS person than anything else). And at the same time, see if Microfocus COBOL has similar techniques, devices, etc. available that CICS has.

CICS has something called &quot;temporary storage queues&quot; (TSQ's). These are temporary files which can be created to store an unlimited amount of data for later processing. Data is loaded onto TSQ's according to &quot;items.&quot; Each Item can be as big or as small as one wants it, and will be available for reading, processing, etc.

So what I would do in CICS is load the first 11 records for display on the first TSQ item, load the next 11 records for display on the 2nd TSQ item and so forth. Each item then becomes a &quot;page&quot; for display. The user can choose to display whatever page s/he wishes, simply by designating the page, which corresponds with the TSQ's item.

I don't know if Microfocus COBOL has anything similar to TSQ's with its Items. But I'm sure that it could create some sort of temporary file. Even a fixed size temporary file would do, as you have said that you want to accomodate 200 records.

With this method of creating a temporary file, we're going to get into a two-dimensional array. The first dimension is the number of records to be displayed for each screen (or &quot;page&quot;). This would occur 11 times. The second dimension of the array would be the number of &quot;pages&quot; or groups of 11 records. This would occur 200 times, so you would have up to 200 &quot;pages.&quot;

By arranging your temporary file in this way, the user can designate which &quot;page&quot; s/he wants to be displayed. Or you can create a &quot;scrolling&quot; function where is the user presses PF8, the next &quot;page&quot; forward is displayed, and if the user presses PF7, the preceding &quot;page&quot; is displayed. And the default display would display &quot;page&quot; 1. You can use other PF keys to go to the top or the bottom of your groups of records.

Hope this helps, Nina Too
 
microfocus has tables (arrays)that are held in temporary storage. It is a single dimension. There must be a way to do this.
 
So your temporary tables are defined as single-dimension arrays. That will probably work, as TSQ's operate in a similar way.

Simply load 11 records into your Temporary Table 1. This will be &quot;page 1.&quot; Then load the next 11 records into Temporary Table 2, and this will be &quot;page 2.&quot; And so forth. Then for display, according to what the user wants, display the contents of tha indicated &quot;page&quot; on the screen. Are you able to do it like this, defining more than 1 table in your temporary storage?

Or can you only load 1 table at a time into your temporary storage (or else creating all those temporary tables might take up too many resources in your system)? If so, then for each run-through of your application, you will have to create a file which will have your 2-dimensional array defined there. Each created file name will include the user terminal ID (which is similar to how TSQ's are named in CICS) so that more than 1 user can run this application at the same time.

You write your groups of 11 records into each &quot;page&quot; (your second dimension of your array). AFter you write the entires onto this file, you can read off of it and display the indicated group of 11 records on your screen. At the end of each run through, you delete this file. The files will have been defined in a user-specific way, so when one user gets done and the file is deleted, this will not affect any other users who are concurrently running the application.

Hope this will help, Nina Too
 
It is only a one dimensional table. Looking back on the code for the screen display, I have lname(name-idx), does that mean I have to use lname(1) throught lname(11) for the first screen and then make another screen lname(12) - lname(22) and so on, this is the part I am confused at.

I have the input file (sequential that also has an indexed file) reading into a table (that occurs 200 times), then if the lname = si-lname (user input from the screen) I have those specific fields (last name, first name) moved from the input file (the input file has address and so on in it, but I only want the names) to the table (i.e. move first_name to table-first_name, move last_name to table_last_name), I then read the indexed file (that is tied to the master sequential file)and have those last_names and first_names loaded into the table as well.

Then, after all first_names and last_names from both tables have been loaded into the same table, I do a perform varying and then have it display on a screen, like in the previous message, Is this the best way????
 
Let me ask you again, whether you want a &quot;scrolling&quot; sort of display.

In other words, once you have picked out the records you want to display, and have loaded them onto your single-level 200 occuring table: do want the first 11 records to be displayed, then if the user hits PF8 (or whatever is your &quot;forward&quot; key), do you want the second group of 11 to be displayed (scroll forward). Then if the user hits PF7, the first group would come up (scroll backwards) or else if PF8 is hit, the third group would come up (scroll forward some more). Is this what you want?

Assuming that you do, then you will need some sort of display table or file. You will load the records which have already been formatted, selected for display in your original 200-occurence table into another table in groups of 11 to form &quot;pages&quot; for the actual display.

Let me see if I can do some sort of diagram here. Pretend that in the diagram below, each group has 11 records (rather than the 2 I put in to save space): Each record will be one of 11 occurrences on the 2nd level of your array. Each group or &quot;page&quot; will be one of 19 occurrences (200/11 = 18 plus one more row to accomodate the last 9 records) on the 1st level of your array.

(data being displayed. Each &quot;page&quot;
contains 11 rows)
| * * * * * * * * * * *
1st occurrence | * * * * * * * * * * * etc.
(&quot;page&quot; 1) | (9 other rows follow)
===
| * * * * * * * * * * *
2nd occurrence | * * * * * * * * * * * etc.
(&quot;page&quot; 2) | (9 other rows follow)
(17 other groups follow)

Does this format make any sense? Is your system able to format a display table in these 2 dimensions? Because then you can reference each page to display, and load the records onto your screen 1-by-1 according to which &quot;page&quot; the user wants.

If not, then you can still do this. You'll do a record-by-record method of processing, using a single-level array of 19 &quot;pages&quot; of records. On each occurrence, you list 11 variable fields, 1 for each record. You name them REC-1, REC-2, REC-3 and so forth up to REC-11. Each of these fields will contain enough bytes to fit a display of 1 record.

For varying lengths of actual records, you will set an &quot;end-of-records&quot; flag when the user reaches the empty occurrences, which will flash &quot;no more records&quot; on the screen. If the users hits PF7 enough times to hit the first &quot;page,&quot; then a flag will indicate a &quot;beginning set of records&quot; display on the screen.

Hope this helps, Nina Too
 
I have tried this, but now I am getting an &quot;subscript out of range error&quot;
 
Okay, what this means is that you are pushing your subscript past the number of occurs you have defined in your table. Here are a few thoughts:

If your occurs clause states 200 occurences, then you can do a PERFORM UNTIL or PERFORM VARYING until the subscript (or index) goes over 200 i.e. PERFORM UNTIL SUB > 200. Under default, your program will test the condition (is SUB > 200?) before it goes any further.

This test-before will stop the processing right after you've completed the 200th record and before you would do anything with the 201st record (which doesn't exist).

I trust that, in this program, you are not coding a TEST AFTER condition. Because in this case, you would go outside the subscript's range because the program would try and process the non-existent 201st record before it tests to see if the subscript is > 200. But unless you specifically said TEST AFTER, then your program will do it as a TEST BEFORE.

Check to see that your subscript is initialized at 1 (or wherever you want it to start) and not at 0. Because if your subscript starts at 0, it will be out of range. Do you have a debugging tool which will let you run the program step-by-step and look at the values that actually exist in your subscript as you run through the steps? The value should run from 1 to 200 (or briefly hit 201 at the very last test of the condition). If any other value gets into the subscript field, then it will be out of range.

If you code your program as a PERFORM VARYING SUB FROM 1 BY 1, then this will automatically initialize the subscript at 1. But if you use a PERFORM UNTIL, then you must initialize the subscript at 1 (or wherever you want it to start).

If you are using a 2-dimensional array, then you have to keep track of the 2 subscripts, realizing that (in this case) they have 2 different ranges. Make sure you are not mixing up the range of the 1st dimension with the range of the 2nd dimension.

Let me know how it goes, Nina Too
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top