APPENDIX 8: SAMPLE APPLICATION PROGRAMS AND JCL
This appendix exhibits sample batch user application programs written in COBOL, Assembler, PL/1, C and NATURAL. These programs exemplify how a user-written application program may be coded to interact with Geosupport via its Application Programming Interface (API).
For each sample program, this appendix contains a printout of the job-stream input for an MSW application, the job-stream input for a COW application, and a printout of the program execution output report. The job-stream input contains the JCL to compile, link-edit and execute the program and, embedded in the JCL, the program source code (except for NATURAL) and a few in-stream records of sample input data. The NATURAL program source code is not embedded in the job-stream, and is printed separately. The MSW and COW sample programs both generate the same output report.
Please note that the sample application programs are not guaranteed to run exactly as shown in this appendix. The samples are here as an aid in developing Geosupport application programs.
All of the sample programs use the Geosupport COPY facility. Since this appendix displays un-compiled source code rather than compilation output listings, the source code is shown without the COPY file expansions. Therefore, the source code as shown contains references to fields in Geosupport work areas but does not contain the definitions of those fields. To see those definitions, refer to the listings of the COPY file contents in Appendix 5 (for MSW) and Appendix 14 (for COW).
There are two sample programs in each programming language, referred to as Sample Programs #1 and #2. The processing performed in Sample Program #1 is similar for all of the programming languages, as is the processing performed in Sample Program #2. Note: there is an MSW and COW version of each of the sample programs.
In brief, Sample Program #1 reads a record containing an address from the in-stream input file; calls Functions 1 and D, checking the Geosupport Return Code (GRC) generated by each call; and writes a record into a formatted output report. The report displays the input address data and, as appropriate, selected output data obtained from Geosupport and/or the GRC, Reason Code and Message.
Sample Program #2 performs similar processing, but its input file contains street intersections instead of addresses, and accordingly it calls Function 2 instead of Function 1.
Both sample programs use the Compact Names feature to direct Geosupport to return street names in a format suitable for display in the output report. In addition, Sample Program #1, but not Sample Program #2, uses the Street Name Normalization Length Limit (SNL) feature to limit the lengths of normalized street names so they will fit into that program’s output report.
In both sample programs, Function D is called to generate the cross street names. Note, that Geosupport will generate all the cross street names automatically if the user specifies the Cross Street Names Flag in the initial Function 1 or Function 2 call or if the user calls Functions 1/1E Extended or Function 1B. (See Cross Street Names Flag in Appendix 3.) The Function D call, however, is used in the sample programs to demonstrate use of Function D and a one work-area-call.
In detail, the processing performed by Sample Program #1 is as follows:
-
Read a record from the in-stream input file.
-
Prime Work Area 1 with the function code, the Work Area Format Indicator (required for COW), the address information (Borough Code, House Number and Street Name) from the input record, the appropriate SNL value, and the code required to request street names in the compact format.
-
Call Function 1.
-
Examine the Geosupport Return Code (GRC).
-
If the GRC indicates a successful call or a warning, use the street codes of the cross streets retrieved in WA2 as input to a Function D call to obtain their street names for display in the output report 14. The Function D processing is performed as follows:
-
Prime Work Area 1 with the function code value, the Work Area Format Indicator (required for COW), and the street codes of the cross streets obtained from the Function 1 call.
-
Call Function D
-
Note: If the Cross Street Names Flag is used in the original call to Function 1 (or if Extended Mode of Function1 is used or if Function 1B is used), all the cross street names will be returned.
-
Examine the GRC.
-
If the GRC is zeros, include the street names obtained from Function D in the output report. Otherwise, include the GRC, the Reason Code and the warning/reject message in the output report.
-
Write an output report line containing the input information and, selected output information obtained from Work Area 2 (e.g., the ZIP code, Community District, and cross streets) and/or the Geosupport Return Code, Reason Code and Message
___________________________
14 Note: The sample programs have been written in a skeletal fashion to illustrate the use of the Geosupport API as clearly as possible. Thus, for example, Sample Program #1 assumes, when it gets a ’hit’ for an input address, that WA2 contains at least one cross street at each end of the block face containing the address. In reality, this is not necessarily the case; in a real application, the program would check for the presence of cross street codes before calling Function D.
COBOL SAMPLE PROGRAM #1
//COBF1SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** COBOL SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1 ****
//*** MSW FORMAT ****
//********************************************************************
//STEP1 EXEC IGYWCLG,PARM.COBOL=(NOWORD,OPTIMIZE)
//COBOL.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
//COBOL.SYSIN DD *
*****************************************************************
\* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING *
\* BORO, HOUSE NUMBER & STREET NAME SUPPLIED BY AN INSTREAM FILE.*
\* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. *
\* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
\* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET *
\* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 1. *
*****************************************************************
*
IDENTIFICATION DIVISION.
PROGRAM-ID. COBS1JOB.
****************************************
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO INFILE.
SELECT RPT-FILE ASSIGN TO RPTFILE.
****************************************
DATA DIVISION.
FILE SECTION.
**** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DEFINTION *****
FD IN-FILE
RECORDING MODE IS F
RECORD CONTAINS 80 CHARACTERS
LABEL RECORDS ARE OMITTED.
01 INPUT-TO-GEOSUPPORT.
05 IN-BORO-CODE PIC X.
05 FILLER PIC X.
05 IN-HOUSE-NUMBER PIC X(12).
05 FILLER PIC X.
05 IN-STREET PIC X(32).
05 FILLER PIC X(33).
FD RPT-FILE
RECORDING MODE IS F
RECORD CONTAINS 132 CHARACTERS
LABEL RECORDS ARE OMITTED.
01 RPT-LINE PIC X(132).
WORKING-STORAGE SECTION.
**************************************************************
*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
*** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
*****************************************************************
01 WORK1. COPY W1COB.
01 WORK2. COPY W2COB.
**** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *********
01 RPT-DATA-LINE1.
05 OUT-BOR PIC X.
05 FILLER PIC X VALUE ' '.
05 OUT-HN PIC X(12).
05 FILLER PIC X VALUE ' '.
05 OUT-ST PIC X(32).
05 FILLER PIC X VALUE ' '.
05 OUT-ZIP PIC X(5).
05 FILLER PIC X VALUE ' '.
05 OUT-CD PIC X(2).
05 FILLER PIC X VALUE ' '.
05 OUT-NYPD-PCT PIC X(3).
05 FILLER PIC X(6) VALUE ' '.
05 OUT-SCHLDIST PIC X(2).
05 FILLER PIC X(58) VALUE ' '.
01 RPT-DATA-LINE2.
05 FILLER PIC X(74) VALUE ' '.
05 OUT-LO-X-STREET PIC X(25).
05 FILLER PIC X VALUE ' '.
05 OUT-HI-X-STREET PIC X(25).
01 RPT-ERR-LINE-1.
05 ERR-BOR PIC X.
05 FILLER PIC X VALUE ' '.
05 ERR-HN PIC X(12).
05 FILLER PIC X VALUE ' '.
05 ERR-ST PIC X(32).
05 FILLER PIC X(14)
VALUE ' *** FUNCTION '.
05 ERR-FUNCTION PIC X.
05 FILLER PIC X(7)
VALUE ' GRC = '.
05 ERR-GRC PIC X(2).
05 FILLER PIC X(15) VALUE ' REASON CODE = '.
05 ERR-REASON PIC X.
05 FILLER PIC X(45) VALUE ' '.
01 RPT-ERR-LINE-2.
05 FILLER PIC X(48) VALUE ' '.
05 FILLER PIC X(4) VALUE '*** '.
05 OUT-ERR-MSG PIC X(80).
01 RPT-WRN-LINE.
05 WRN-BOR PIC X.
05 FILLER PIC X VALUE ' '.
05 WRN-HN PIC X(12).
05 FILLER PIC X VALUE ' '.
05 WRN-ST PIC X(32).
05 FILLER PIC X(14)
VALUE ' *** FUNCTION '.
05 WRN-FUNCTION PIC X.
05 FILLER PIC X(16)
VALUE ' WARNING, GRC = '.
05 WRN-GRC PIC X(2).
05 FILLER PIC X(15) VALUE ' REASON CODE = '.
05 WRN-REASON PIC X(1).
05 FILLER PIC X(36) VALUE ' '.
01 RPT-HEADER-1.
05 FILLER PIC X(40) VALUE
'SAMPLE COBOL PROGRAM \#1 EXECUTION OUTPUT'.
05 FILLER PIC X(72) VALUE ' '.
01 RPT-HEADER-2.
05 FILLER PIC X(58) VALUE
'*****---------- INPUT ADDRESS ------------***** *****-----'.
05 FILLER PIC X(58) VALUE
'---------------- SELECTED OUTPUT ITEMS -------------------'.
05 FILLER PIC X(16) VALUE
'----***** '.
01 RPT-HEADER-3.
05 FILLER PIC X(58) VALUE
'B HOUSE NUMBER IN-STREET-NAME ZIP CD N'.
05 FILLER PIC X(58) VALUE
'YPD-PCT SCHLDST LOW CROSS STREET HIGH CROSS STREE'.
05 FILLER PIC X(16) VALUE
'T '.
01 RPT-HEADER-4.
05 FILLER PIC X(58) VALUE
'_ ____________ ________________________________ _____ __ \_'.
05 FILLER PIC X(58) VALUE
'_______ _______ _________________________ ________________'.
05 FILLER PIC X(16) VALUE
'_________ '.
01 FLAGS.
05 DATA-FLAG PIC XXX VALUE 'YES'.
88 MORE-DATA VALUE 'YES'.
88 NO-DATA VALUE 'NO '.
****************************************
PROCEDURE DIVISION.
OPEN INPUT IN-FILE, OUTPUT RPT-FILE.
WRITE RPT-LINE FROM RPT-HEADER-1 AFTER ADVANCING 1 LINES.
WRITE RPT-LINE FROM RPT-HEADER-2 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-HEADER-3 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-HEADER-4 AFTER ADVANCING 0 LINES.
READ IN-FILE AT END MOVE 'NO ' TO DATA-FLAG.
PERFORM PROCESS THRU PROCESS-EX
UNTIL NO-DATA.
CLOSE IN-FILE, RPT-FILE.
MOVE 0 TO RETURN-CODE
STOP RUN.
Process.
*****************************************************************
\* TO MAKE A FUNCTION 1 CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO 1 *
\* (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
\* (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER *
\* FIELD *
\* (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
\* (6) CALL GBI WITH 2 WORKAREAS *
\* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*****************************************************************
*****************************************************************
\* AS OF GEOSUPPORT 10.1, *
\* TO RECEIVE ROADBED-SPECIFIC INFORMATION, *
\* SET THE ROADBED REQUEST SWITCH TO 'R', AS FOLLOWS: *
\* MOVE 'R' TO GEO-WA1-IN-ROADBED-REQ-SWITCH. *
*****************************************************************
MOVE SPACES TO WORK1.
MOVE '1 ' TO GEO-WA1-IN-FUNCTION-CODE.
MOVE IN-BORO-CODE TO GEO-WA1-IN-BORO OUT-BOR ERR-BOR WRN-BOR.
MOVE IN-HOUSE-NUMBER TO GEO-WA1-IN-HOUSENUM OUT-HN ERR-HN
WRN-HN.
MOVE IN-STREET TO GEO-WA1-IN-STREET-1 OUT-ST ERR-ST WRN-ST.
CALL 'GBI' USING WORK1 WORK2.
IF GEO-WA1-OUT-RETURN-CODE NOT = 00
MOVE '1' TO ERR-FUNCTION WRN-FUNCTION
PERFORM PRINT-ERROR-LINE THRU P-E-EX.
IF (GEO-WA1-OUT-RETURN-CODE = 00) OR
(GEO-WA1-OUT-RETURN-CODE = 01)
PERFORM SUCCESSFUL-FUNC1 THRU S-F1-EX.
READ IN-FILE AT END MOVE 'NO ' TO DATA-FLAG.
PROCESS-EX.
EXIT.
SUCCESSFUL-FUNC1.
***********************************************************
***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ***********
***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****
***********************************************************
MOVE GEO-WA2-FN1-ZIP TO OUT-ZIP.
MOVE GEO-WA2-FN1-COMDIST-NUMBER TO OUT-CD.
MOVE GEO-WA2-FN1-POL-PRECINCT TO OUT-NYPD-PCT.
MOVE GEO-WA2-FN1-SCHOOLDIST TO OUT-SCHLDIST.
IF GEO-WA1-OUT-RETURN-CODE = 00
WRITE RPT-LINE FROM RPT-DATA-LINE1 AFTER ADVANCING 2 LINES
ELSE
MOVE SPACES TO OUT-BOR OUT-HN OUT-ST
WRITE RPT-LINE FROM RPT-DATA-LINE1 AFTER ADVANCING 1 LINES.
************************************************************
\* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND *
\* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE *
\* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS *
\* FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO D *
\* (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED *
\* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE *
\* HAS SPACE FOR ONLY 25 CHARACTERS) *
\* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
\* STREET NAMES FORMATTED FOR DISPLAY *
\* (5) MOVE WA2'S LOW PBSC FIELD TO WA1'S INPUT STREET *
\* CODE 1 FIELD *
\* (6) MOVE WA2'S HIGH PBSC FIELD TO WA1'S INPUT STREET *
\* CODE 2 FIELD *
\* (7) CALL GBI WITH 1 WORKAREA *
\* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
************************************************************
MOVE SPACES TO WORK1.
MOVE 'D ' TO GEO-WA1-IN-FUNCTION-CODE.
MOVE 'C' TO GEO-WA1-IN-COMPACT-NAME-FLAG.
MOVE '25' TO GEO-WA1-IN-SNL.
MOVE GEO-WA2-FN1-LOW-PBSC (1) TO GEO-WA1-IN-STREETCODE-1.
MOVE GEO-WA2-FN1-HI-PBSC (1) TO GEO-WA1-IN-STREETCODE-2.
CALL 'GBI' USING WORK1.
IF GEO-WA1-OUT-RETURN-CODE NOT = 00
MOVE 'D' TO ERR-FUNCTION WRN-FUNCTION
PERFORM PRINT-ERROR-LINE THRU P-E-EX.
IF (GEO-WA1-OUT-RETURN-CODE = 00) OR
(GEO-WA1-OUT-RETURN-CODE = 01)
PERFORM SUCCESSFUL-FUNCD THRU S-FD-EX.
S-F1-EX.
EXIT.
SUCCESSFUL-FUNCD.
MOVE GEO-WA1-OUT-STREET-1 TO OUT-LO-X-STREET
MOVE GEO-WA1-OUT-STREET-2 TO OUT-HI-X-STREET
WRITE RPT-LINE FROM RPT-DATA-LINE2 AFTER ADVANCING 0 LINES.
S-FD-EX.
EXIT.
PRINT-ERROR-LINE.
MOVE GEO-WA1-OUT-RETURN-CODE TO ERR-GRC WRN-GRC.
MOVE GEO-WA1-OUT-REASON-CODE TO ERR-REASON WRN-REASON.
MOVE GEO-WA1-OUT-ERROR-MESSAGE TO OUT-ERR-MSG.
IF GEO-WA1-OUT-RETURN-CODE = 01
**** INSERT YOUR OWN WARNING ROUTINE HERE ****
WRITE RPT-LINE FROM RPT-WRN-LINE AFTER ADVANCING 2 LINES
ELSE
**** INSERT YOUR OWN WARNING ROUTINE HERE ****
WRITE RPT-LINE FROM RPT-ERR-LINE-1 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-ERR-LINE-2 AFTER ADVANCING 1 LINES.
P-E-EX.
EXIT.
/*
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//******************************************************************//
//* \*//
//* AS OF GEOSUPPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* \*//
//******************************************************************//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//******************************************************************//
//* \*//
//* AS OF GEOSUPPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, ETC) \*//
//* ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT IS TAILORED \*//
//* TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
//* \*//
//******************************************************************//
//*
//GO.SYSUDUMP DD SYSOUT=A,OUTLIM=3000
//GO.SYSOUT DD SYSOUT=A
//GO.RPTFILE DD SYSOUT=A
//GO.INFILE DD *
1 22 READE ST
1 500 DUANE ST
1 82-84 BROADWAY
4 165-100 BAISLEY BLVD
4 165-1000 BAISLEY BLVD
/*
//
//COBC1SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** COBOL SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM #1 ****
//*** COW FORMAT ****
//********************************************************************
//STEP1 EXEC IGYWCLG,PARM.COBOL=(NOWORD,OPTIMIZE)
//COBOL.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
//COBOL.SYSIN DD *
*****************************************************************
\* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING *
\* BORO, HOUSE NUMBER & STREET NAME SUPPLIED BY AN INSTREAM FILE.*
\* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. *
\* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
\* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET *
\* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 1. *
*****************************************************************
*
IDENTIFICATION DIVISION.
PROGRAM-ID. COBS1JOB.
****************************************
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO INFILE.
SELECT RPT-FILE ASSIGN TO RPTFILE.
****************************************
DATA DIVISION.
FILE SECTION.
**** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DEFINTION *****
FD IN-FILE
RECORDING MODE IS F
RECORD CONTAINS 80 CHARACTERS
LABEL RECORDS ARE OMITTED.
01 INPUT-TO-GEOSUPPORT.
05 IN-BORO-CODE PIC X.
05 FILLER PIC X.
05 IN-HOUSE-NUMBER PIC X(12).
05 FILLER PIC X.
05 IN-STREET PIC X(32).
05 FILLER PIC X(33).
FD RPT-FILE
RECORDING MODE IS F
RECORD CONTAINS 132 CHARACTERS
LABEL RECORDS ARE OMITTED.
01 RPT-LINE PIC X(132).
WORKING-STORAGE SECTION.
*****************************************************************
*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
*** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
*****************************************************************
01 WORK1. COPY P1COB.
01 WORK2. COPY P2COB.
**** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *********
01 RPT-DATA-LINE1.
05 OUT-BOR PIC X.
05 FILLER PIC X VALUE ' '.
05 OUT-HN PIC X(12).
05 FILLER PIC X VALUE ' '.
05 OUT-ST PIC X(32).
05 FILLER PIC X VALUE ' '.
05 OUT-ZIP PIC X(5).
05 FILLER PIC X VALUE ' '.
05 OUT-CD PIC X(2).
05 FILLER PIC X VALUE ' '.
05 OUT-NYPD-PCT PIC X(3).
05 FILLER PIC X(6) VALUE ' '.
05 OUT-SCHLDIST PIC X(2).
05 FILLER PIC X(58) VALUE ' '.
01 RPT-DATA-LINE2.
05 FILLER PIC X(74) VALUE ' '.
05 OUT-LO-X-STREET PIC X(25).
05 FILLER PIC X VALUE ' '.
05 OUT-HI-X-STREET PIC X(25).
01 RPT-ERR-LINE-1.
05 ERR-BOR PIC X.
05 FILLER PIC X VALUE ' '.
05 ERR-HN PIC X(12).
05 FILLER PIC X VALUE ' '.
05 ERR-ST PIC X(32).
05 FILLER PIC X(14)
VALUE ' *** FUNCTION '.
05 ERR-FUNCTION PIC X.
05 FILLER PIC X(7)
VALUE ' GRC = '.
05 ERR-GRC PIC X(2).
05 FILLER PIC X(15) VALUE ' REASON CODE = '.
05 ERR-REASON PIC X.
05 FILLER PIC X(45) VALUE ' '.
01 RPT-ERR-LINE-2.
05 FILLER PIC X(48) VALUE ' '.
05 FILLER PIC X(4) VALUE '*** '.
05 OUT-ERR-MSG PIC X(80).
01 RPT-WRN-LINE.
05 WRN-BOR PIC X.
05 FILLER PIC X VALUE ' '.
05 WRN-HN PIC X(12).
05 FILLER PIC X VALUE ' '.
05 WRN-ST PIC X(32).
05 FILLER PIC X(14)
VALUE ' *** FUNCTION '.
05 WRN-FUNCTION PIC X.
05 FILLER PIC X(16)
VALUE ' WARNING, GRC = '.
05 WRN-GRC PIC X(2).
05 FILLER PIC X(15) VALUE ' REASON CODE = '.
05 WRN-REASON PIC X(1).
05 FILLER PIC X(36) VALUE ' '.
01 RPT-HEADER-1.
05 FILLER PIC X(40) VALUE
'SAMPLE COBOL PROGRAM \#1 EXECUTION OUTPUT'.
05 FILLER PIC X(72) VALUE ' '.
01 RPT-HEADER-2.
05 FILLER PIC X(58) VALUE
'*****---------- INPUT ADDRESS ------------***** *****-----'.
05 FILLER PIC X(58) VALUE
'---------------- SELECTED OUTPUT ITEMS -------------------'.
05 FILLER PIC X(16) VALUE
'----***** '.
01 RPT-HEADER-3.
05 FILLER PIC X(58) VALUE
'B HOUSE NUMBER IN-STREET-NAME ZIP CD N'.
05 FILLER PIC X(58) VALUE
'YPD-PCT SCHLDST LOW CROSS STREET HIGH CROSS STREE'.
05 FILLER PIC X(16) VALUE
'T '.
01 RPT-HEADER-4.
05 FILLER PIC X(58) VALUE
'_ ____________ ________________________________ _____ __ \_'.
05 FILLER PIC X(58) VALUE
'_______ _______ _________________________ ________________'.
05 FILLER PIC X(16) VALUE
'_________ '.
01 FLAGS.
05 DATA-FLAG PIC XXX VALUE 'YES'.
88 MORE-DATA VALUE 'YES'.
88 NO-DATA VALUE 'NO '.
****************************************
PROCEDURE DIVISION.
OPEN INPUT IN-FILE, OUTPUT RPT-FILE.
WRITE RPT-LINE FROM RPT-HEADER-1 AFTER ADVANCING 1 LINES.
WRITE RPT-LINE FROM RPT-HEADER-2 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-HEADER-3 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-HEADER-4 AFTER ADVANCING 0 LINES.
READ IN-FILE AT END MOVE 'NO ' TO DATA-FLAG.
PERFORM PROCESS THRU PROCESS-EX
UNTIL NO-DATA.
CLOSE IN-FILE, RPT-FILE.
MOVE 0 TO RETURN-CODE
STOP RUN.
PROCESS.
*****************************************************************
\* TO MAKE A FUNCTION 1 CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO 1 *
\* (3) SET THE PLATFORM INDICATOR SWITCH (NON-IBM-MAINFRAME) *
\* TO USE CHARACTER-ONLY WORK AREAS (COWS) *
\* (4) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
\* (5) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER *
\* FIELD *
\* (6) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
\* (7) CALL GBI WITH 2 WORKAREAS *
\* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*****************************************************************
*****************************************************************
\* AS OF GEOSUPPORT 10.1, *
\* TO RECEIVE ROADBED-SPECIFIC INFORMATION, *
\* SET THE ROADBED REQUEST SWITCH TO 'R', AS FOLLOWS: *
\* MOVE 'R' TO PIWA1-IN-ROADBED-REQ-SWITCH. *
*****************************************************************
MOVE SPACES TO WORK1.
MOVE '1 ' TO PIWA1-IN-FUNC-CODE.
MOVE 'C' TO GEO-WA1-IN-NON-IBM-MAIN-FRAME.
MOVE IN-BORO-CODE TO GEO-WA1-IN-BORO OUT-BOR ERR-BOR WRN-BOR.
MOVE IN-HOUSE-NUMBER TO PIWA1-IN-HOUSENUM-DISPLAY OUT-HN
ERR-HN WRN-HN.
MOVE IN-STREET TO GEO-WA1-IN-STREET-1 OUT-ST ERR-ST WRN-ST.
CALL 'GBI' USING WORK1 WORK2.
IF GEO-WA1-OUT-RETURN-CODE NOT = 00
MOVE '1' TO ERR-FUNCTION WRN-FUNCTION
PERFORM PRINT-ERROR-LINE THRU P-E-EX.
IF (GEO-WA1-OUT-RETURN-CODE = 00) OR
(GEO-WA1-OUT-RETURN-CODE = 01)
PERFORM SUCCESSFUL-FUNC1 THRU S-F1-EX.
READ IN-FILE AT END MOVE 'NO ' TO DATA-FLAG.
PROCESS-EX.
EXIT.
SUCCESSFUL-FUNC1.
***********************************************************
***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ***********
***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****
***********************************************************
MOVE GEO-WA2-FN1-ZIP TO OUT-ZIP.
MOVE GEO-WA2-FN1-COMDIST-NUMBER TO OUT-CD.
MOVE GEO-WA2-FN1-POL-PRECINCT TO OUT-NYPD-PCT.
MOVE GEO-WA2-FN1-SCHOOLDIST TO OUT-SCHLDIST.
IF GEO-WA1-OUT-RETURN-CODE = 00
WRITE RPT-LINE FROM RPT-DATA-LINE1 AFTER ADVANCING 2 LINES
ELSE
MOVE SPACES TO OUT-BOR OUT-HN OUT-ST
WRITE RPT-LINE FROM RPT-DATA-LINE1 AFTER ADVANCING 1 LINES.
****************************************************************
\* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND *
\* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE *
\* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS *
\* FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO D *
\* (3) SET THE PLATFORM INDICATOR SWITCH (NON-IBM-MAINFRAME) *
\* TO USE CHARACTER-ONLY WORK AREAS (COWS) *
\* (4) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED *
\* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE *
\* HAS SPACE FOR ONLY 25 CHARACTERS) *
\* (5) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
\* STREET NAMES FORMATTED FOR DISPLAY *
\* (6) MOVE WA2'S LOW BSC FIELD TO WA1'S INPUT STREET *
\* CODE 1 FIELD *
\* (7) MOVE WA2'S HIGH BSC FIELD TO WA1'S INPUT STREET *
\* CODE 2 FIELD *
\* (8) CALL GBI WITH 1 WORKAREA *
\* (9) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
****************************************************************
MOVE SPACES TO WORK1.
MOVE 'D ' TO PIWA1-IN-FUNC-CODE.
MOVE 'C' TO GEO-WA1-IN-NON-IBM-MAIN-FRAME.
MOVE 'C' TO GEO-WA1-IN-COMPACT-NAME-FLAG.
MOVE '25' TO GEO-WA1-IN-SNL.
MOVE PIWA2-FN1-LOW-B5SC (1) TO GEO-WA1-IN-10SC-1.
MOVE PIWA2-FN1-HI-B5SC (1) TO GEO-WA1-IN-10SC-2.
CALL 'GBI' USING WORK1.
IF GEO-WA1-OUT-RETURN-CODE NOT = 00
MOVE 'D' TO ERR-FUNCTION WRN-FUNCTION
PERFORM PRINT-ERROR-LINE THRU P-E-EX.
IF (GEO-WA1-OUT-RETURN-CODE = 00) OR
(GEO-WA1-OUT-RETURN-CODE = 01)
PERFORM SUCCESSFUL-FUNCD THRU S-FD-EX.
S-F1-EX.
EXIT.
SUCCESSFUL-FUNCD.
MOVE GEO-WA1-OUT-STREET-1 TO OUT-LO-X-STREET
MOVE GEO-WA1-OUT-STREET-2 TO OUT-HI-X-STREET
WRITE RPT-LINE FROM RPT-DATA-LINE2 AFTER ADVANCING 0 LINES.
S-FD-EX.
EXIT.
PRINT-ERROR-LINE.
MOVE GEO-WA1-OUT-RETURN-CODE TO ERR-GRC WRN-GRC.
MOVE GEO-WA1-OUT-REASON-CODE TO ERR-REASON WRN-REASON.
MOVE GEO-WA1-OUT-ERROR-MESSAGE TO OUT-ERR-MSG.
IF GEO-WA1-OUT-RETURN-CODE = 01
**** INSERT YOUR OWN WARNING ROUTINE HERE ****
WRITE RPT-LINE FROM RPT-WRN-LINE AFTER ADVANCING 2 LINES
ELSE
**** INSERT YOUR OWN ERROR ROUTINE HERE ****
WRITE RPT-LINE FROM RPT-ERR-LINE-1 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-ERR-LINE-2 AFTER ADVANCING 1 LINES.
P-E-EX.
EXIT.
/*
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//******************************************************************//
//* \*//
//* AS OF GEOSUPPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* \*//
//******************************************************************//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//******************************************************************//
//* \*//
//* AS OF GEOSUPPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, ETC) \*//
//* ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT IS TAILORED \*//
//* TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
//* \*//
//******************************************************************//
//*
//GO.SYSUDUMP DD SYSOUT=A,OUTLIM=3000
//GO.SYSOUT DD SYSOUT=A
//GO.RPTFILE DD SYSOUT=A
//GO.INFILE DD *
1 22 READE ST
1 500 DUANE ST
1 82-84 BROADWAY
4 165-100 BAISLEY BLVD
4 165-1000 BAISLEY BLVD
/*
//
SAMPLE COBOL PROGRAM \#1 EXECUTION OUTPUT
*****---------- INPUT ADDRESS ------------***** *****--------------------- SELECTED OUTPUT ITEMS -----------------------*****
B HOUSE NUMBER IN-STREET-NAME ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET HIGH CROSS STREET
- ------------ -------------------------------- ----- -- -------- ------- ------------------------- -------------------------
1 22 READE ST 10007 01 005 02 ELK STREET BROADWAY
1 500 DUANE ST *** FUNCTION 1 GRC = 42 REASON CODE =
*** ADDRESS NUMBER OUT OF RANGE
1 82-84 BROADWAY *** FUNCTION 1 WARNING, GRC = 01 REASON CODE = 1
*** ADDR NUMBER ALTERED: RANGE ASSUMED. USING DIGITS BEFORE DASH ONLY
10005 01 001 02 RECTOR STREET WALL GREEN
4 165-100 BAISLEY BLVD 11434 12 113 28 SMITH STREET 166 STREET
4 165-1000 BAISLEY BLVD *** FUNCTION 1 GRC = 13 REASON CODE = 2
*** ADDRESS NBR 165-1000 HAS MORE THAN 3 DIGITS AFTER THE DASH.
COBOL SAMPLE PROGRAM #2
//COBF2SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** COBOL SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#2 ****
//*** MSW FORMAT ****
//********************************************************************
//STEP1 EXEC IGYWCLG,PARM.COBOL=(NOWORD,OPTIMIZE)
//COBOL.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
//COBOL.SYSIN DD *
*****************************************************************
\* THIS PROGRAM MAKES FUNCTION 2 AND D CALLS TO GEOSUPPORT USING *
\* TWO BOROS AND TWO STREET NAMES SUPPLIED BY AN INSTREAM FILE. *
\* FUNCTION 2 RETURNS GEOGRAPHIC INFORMATION FOR AN INTERSECTION.*
\* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
\* ORIGINAL CALL TO FUNCTION 2, ALL THE CROSS STREET *
\* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 2. *
*****************************************************************
*
IDENTIFICATION DIVISION.
PROGRAM-ID. COBS1JOB.
****************************************
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO INFILE.
SELECT RPT-FILE ASSIGN TO RPTFILE.
****************************************
DATA DIVISION.
FILE SECTION.
**** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DEFINTION *****
FD IN-FILE
RECORDING MODE IS F
RECORD CONTAINS 80 CHARACTERS
LABEL RECORDS ARE OMITTED.
01 INPUT-TO-GEOSUPPORT.
05 IN-BOR1 PIC X.
05 FILLER PIC X.
05 IN-STREET1 PIC X(32).
05 FILLER PIC X.
05 IN-BOR2 PIC X.
05 FILLER PIC X.
05 IN-STREET2 PIC X(32).
05 FILLER PIC X(11).
FD RPT-FILE
RECORDING MODE IS F
RECORD CONTAINS 132 CHARACTERS
LABEL RECORDS ARE OMITTED.
01 RPT-LINE PIC X(132).
WORKING-STORAGE SECTION.
77 I PIC 9 VALUE 0.
*****************************************************************
*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
*** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
*****************************************************************
01 WORK1. COPY W1COB.
01 WORK2. COPY W2COB.
**** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *********
01 RPT-DATA-LINE1.
05 OUT-BOR1 PIC X.
05 FILLER PIC X VALUE ' '.
05 OUT-ST1 PIC X(32).
05 FILLER PIC X VALUE ' '.
05 OUT-BOR2 PIC X.
05 FILLER PIC X VALUE ' '.
05 OUT-ST2 PIC X(32).
05 OUT-DETAIL.
10 FILLER PIC X VALUE ' '.
10 OUT-ZIP PIC X(5).
10 FILLER PIC X VALUE ' '.
10 OUT-CD PIC X(2).
10 FILLER PIC X VALUE ' '.
10 OUT-NYPD-PCT PIC X(3).
10 FILLER PIC X(6) VALUE ' '.
10 OUT-SCHLDIST PIC X(2).
10 FILLER PIC X(42) VALUE ' '.
01 RPT-DATA-LINE2.
05 FILLER PIC X(96) VALUE ' '.
05 OUT-ST PIC X(32).
05 FILLER PIC X(4) VALUE ' '.
01 RPT-ERR-LINE.
05 FILLER PIC X(15) VALUE '***** FUNCTION '.
05 ERR-FUNCTION PIC X.
05 FILLER PIC X(7) VALUE ' GRC = '.
05 ERR-GRC PIC X(2).
05 FILLER PIC X(15) VALUE ' REASON CODE = '.
05 ERR-REASON PIC X.
05 FILLER PIC X(2) VALUE '. '.
05 OUT-ERR-MSG PIC X(80).
05 FILLER PIC X(9) VALUE ' '.
01 RPT-WRN-LINE.
05 FILLER PIC X(15) VALUE '***** FUNCTION '.
05 WRN-FUNCTION PIC X.
05 FILLER PIC X(15) VALUE ' WARNING GRC = '.
05 WRN-GRC PIC X(2).
05 FILLER PIC X(15) VALUE ' REASON CODE = '.
05 WRN-REASON PIC X.
05 FILLER PIC X(2) VALUE '. '.
05 OUT-WRN-MSG PIC X(80).
05 FILLER PIC X VALUE ' '.
01 RPT-HEADER-1.
05 FILLER PIC X(40) VALUE
'SAMPLE COBOL PROGRAM \#2 EXECUTION OUTPUT'.
05 FILLER PIC X(72) VALUE ' '.
01 RPT-HEADER-2.
05 FILLER PIC X(58) VALUE
'*****----------------- INPUT INTERSECTION ----------------'.
05 FILLER PIC X(58) VALUE
'------***** *****------------ SELECTED OUTPUT ITEMS ------'.
05 FILLER PIC X(16) VALUE
'-------*****'.
01 RPT-HEADER-3.
05 FILLER PIC X(58) VALUE
'B IN-STREET-NAME-1 B IN-STREET-NAME-2 '.
05 FILLER PIC X(58) VALUE
' ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET '.
05 FILLER PIC X(16) VALUE
'NAMES '.
01 RPT-HEADER-4.
05 FILLER PIC X(58) VALUE
'_ ________________________________ _ _____________________'.
05 FILLER PIC X(58) VALUE
'___________ _____ __ ________ _______ ____________________'.
05 FILLER PIC X(16) VALUE
'____________ '.
01 FLAGS.
05 DATA-FLAG PIC XXX VALUE 'YES'.
88 MORE-DATA VALUE 'YES'.
88 NO-DATA VALUE 'NO '.
****************************************
PROCEDURE DIVISION.
OPEN INPUT IN-FILE, OUTPUT RPT-FILE.
WRITE RPT-LINE FROM RPT-HEADER-1 AFTER ADVANCING 1 LINES.
WRITE RPT-LINE FROM RPT-HEADER-2 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-HEADER-3 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-HEADER-4 AFTER ADVANCING 0 LINES.
READ IN-FILE AT END MOVE 'NO ' TO DATA-FLAG.
PERFORM PROCESS THRU PROCESS-EX
UNTIL NO-DATA.
CLOSE IN-FILE, RPT-FILE.
MOVE 0 TO RETURN-CODE
STOP RUN.
PROCESS.
******************************************************************
\* TO MAKE A FUNCTION 2 CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION-CODE TO 2 *
\* (3) MOVE THE 1ST INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
\* (4) MOVE THE 1ST INPUT STREET TO WA1'S INPUT STREET NAME *
\* FIELD *
\* (5) MOVE THE 2ND INPUT BORO TO WA1'S INPUT BORO CODE 2 FIELD *
\* (6) MOVE THE 2ND INPUT STREET TO WA1'S INPUT STREET NAME 2 *
\* FIELD *
\* (7) CALL GBI WITH 2 WORKAREAS *
\* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
******************************************************************
MOVE SPACES TO WORK1.
MOVE '2 ' TO GEO-WA1-IN-FUNCTION-CODE.
MOVE IN-BOR1 TO GEO-WA1-IN-BORO OUT-BOR1.
MOVE IN-BOR2 TO GEO-WA1-IN-BORO-2 OUT-BOR2.
MOVE IN-STREET1 TO GEO-WA1-IN-STREET-1 OUT-ST1.
MOVE IN-STREET2 TO GEO-WA1-IN-STREET-2 OUT-ST2.
CALL 'GBI' USING WORK1 WORK2.
IF GEO-WA1-OUT-RETURN-CODE NOT = 00
MOVE '2' TO ERR-FUNCTION WRN-FUNCTION
PERFORM PRINT-ERROR-LINE THRU P-E-EX.
IF (GEO-WA1-OUT-RETURN-CODE = 00) OR
(GEO-WA1-OUT-RETURN-CODE = 01)
PERFORM SUCCESSFUL-FUNC2 THRU S-F2-EX
ELSE
MOVE SPACES TO OUT-DETAIL
WRITE RPT-LINE FROM RPT-DATA-LINE1 AFTER ADVANCING 1 LINES.
READ IN-FILE AT END MOVE 'NO ' TO DATA-FLAG.
PROCESS-EX.
EXIT.
SUCCESSFUL-FUNC2.
***********************************************************
***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ***********
***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****
***********************************************************
MOVE GEO-WA2-FN2-ZIP TO OUT-ZIP.
MOVE GEO-WA2-FN2-COMDIST-NUMBER TO OUT-CD.
MOVE GEO-WA2-FN2-POL-PRECINCT TO OUT-NYPD-PCT.
MOVE GEO-WA2-FN2-SCHOOLDIST TO OUT-SCHLDIST.
\* PROCESS CROSS STREET** CHECK FOR AT LEAST 1.
WRITE RPT-LINE FROM RPT-DATA-LINE1 AFTER ADVANCING 2 LINES.
PERFORM CALL-D THRU CALL-D-EX
VARYING I FROM 1 BY 1 UNTIL
(I > GEO-WA2-FN2-NUM-OF-INTERSECTS).
S-F2-EX.
EXIT.
CALL-D.
*******************************************************
\* TO GET STREET NAMES FOR INTERSECTING STREET CODES *
\* MAKE A FUNCTION D CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET THE WA1'S FUNCTION CODE FIELD TO D *
\* (3) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
\* STREET NAMES FORMATTED FOR DISPLAY *
\* (4) MOVE THE PACKED BORO AND STREET CODE TO *
\* WA1'S INPUT STREET CODE 1 FIELD *
\* (5) CALL GBI WITH 1 WORKAREA *
\* (6) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*******************************************************
MOVE SPACES TO WORK1.
MOVE 'D ' TO GEO-WA1-IN-FUNCTION-CODE.
MOVE 'C' TO GEO-WA1-IN-COMPACT-NAME-FLAG.
MOVE '25' TO GEO-WA1-IN-SNL.
MOVE GEO-WA2-FN2-INTERSECT-PBSC (I)
TO GEO-WA1-IN-STREETCODE-1
CALL 'GBI' USING WORK1.
IF GEO-WA1-OUT-RETURN-CODE NOT = 00
MOVE 'D' TO ERR-FUNCTION WRN-FUNCTION
PERFORM PRINT-ERROR-LINE THRU P-E-EX.
IF (GEO-WA1-OUT-RETURN-CODE = 00) OR
(GEO-WA1-OUT-RETURN-CODE = 01)
PERFORM SUCCESSFUL-FUNCD THRU S-FD-EX.
CALL-D-EX.
EXIT.
SUCCESSFUL-FUNCD.
MOVE GEO-WA1-OUT-STREET-1 TO OUT-ST
IF I = 1
WRITE RPT-LINE FROM RPT-DATA-LINE2 AFTER ADVANCING 0 LINES
ELSE
WRITE RPT-LINE FROM RPT-DATA-LINE2 AFTER ADVANCING 1 LINES.
S-FD-EX.
EXIT.
PRINT-ERROR-LINE.
MOVE GEO-WA1-OUT-RETURN-CODE TO ERR-GRC WRN-GRC.
MOVE GEO-WA1-OUT-REASON-CODE TO ERR-REASON WRN-REASON.
MOVE GEO-WA1-OUT-ERROR-MESSAGE TO OUT-ERR-MSG OUT-WRN-MSG.
IF GEO-WA1-OUT-RETURN-CODE = 01
**** INSERT YOUR OWN WARNING ROUTINE HERE ****
WRITE RPT-LINE FROM RPT-WRN-LINE AFTER ADVANCING 2 LINES
ELSE
**** INSERT YOUR OWN WARNING ROUTINE HERE ****
WRITE RPT-LINE FROM RPT-ERR-LINE AFTER ADVANCING 2 LINES.
P-E-EX.
EXIT.
/*
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//******************************************************************//
//* \*//
//* AS OF GEOSUPPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* \*//
//******************************************************************//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//******************************************************************//
//* \*//
//* AS OF GEOSUPPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, ETC) \*//
//* ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT IS TAILORED \*//
//* TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
/* \*//
//******************************************************************//
//*
//GO.SYSUDUMP DD SYSOUT=A,OUTLIM=3000
//GO.SYSOUT DD SYSOUT=A
//GO.RPTFILE DD SYSOUT=A
//GO.INFILE DD *
1 CHAMBERS ST 1 HUDSON ST
1 SIXTH AVE 1 W. 8 ST
1 DUANE ST 1 READE ST
/*
//
//COBC2SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** COBOL SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM #2 ****
//*** COW FORMAT ****
//********************************************************************
//STEP1 EXEC IGYWCLG,PARM.COBOL=(NOWORD,OPTIMIZE)
//COBOL.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
//COBOL.SYSIN DD *
*****************************************************************
* THIS PROGRAM MAKES FUNCTION 2 AND D CALLS TO GEOSUPPORT USING *
* TWO BOROS AND TWO STREET NAMES SUPPLIED BY AN INSTREAM FILE. *
* FUNCTION 2 RETURNS GEOGRAPHIC INFORMATION FOR AN INTERSECTION.*
* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
* ORIGINAL CALL TO FUNCTION 2, ALL THE CROSS STREET *
* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 2. *
*****************************************************************
*
IDENTIFICATION DIVISION.
PROGRAM-ID. COBS1JOB.
****************************************
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO INFILE.
SELECT RPT-FILE ASSIGN TO RPTFILE.
****************************************
DATA DIVISION.
FILE SECTION.
**** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DEFINTION *****
FD IN-FILE
RECORDING MODE IS F
RECORD CONTAINS 80 CHARACTERS
LABEL RECORDS ARE OMITTED.
01 INPUT-TO-GEOSUPPORT.
05 IN-BOR1 PIC X.
05 FILLER PIC X.
05 IN-STREET1 PIC X(32).
05 FILLER PIC X.
05 IN-BOR2 PIC X.
05 FILLER PIC X.
05 IN-STREET2 PIC X(32).
05 FILLER PIC X(11).
FD RPT-FILE
RECORDING MODE IS F
RECORD CONTAINS 132 CHARACTERS
LABEL RECORDS ARE OMITTED.
01 RPT-LINE PIC X(132).
WORKING-STORAGE SECTION.
77 I PIC 9 VALUE 0.
*****************************************************************
*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
*** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
*****************************************************************
01 WORK1. COPY P1COB.
01 WORK2. COPY P2COB.
**** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *********
01 RPT-DATA-LINE1.
05 OUT-BOR1 PIC X.
05 FILLER PIC X VALUE ' '.
05 OUT-ST1 PIC X(32).
05 FILLER PIC X VALUE ' '.
05 OUT-BOR2 PIC X.
05 FILLER PIC X VALUE ' '.
05 OUT-ST2 PIC X(32).
05 OUT-DETAIL.
10 FILLER PIC X VALUE ' '.
10 OUT-ZIP PIC X(5).
10 FILLER PIC X VALUE ' '.
10 OUT-CD PIC X(2).
10 FILLER PIC X VALUE ' '.
10 OUT-NYPD-PCT PIC X(3).
10 FILLER PIC X(6) VALUE ' '.
10 OUT-SCHLDIST PIC X(2).
10 FILLER PIC X(42) VALUE ' '.
01 RPT-DATA-LINE2.
05 FILLER PIC X(96) VALUE ' '.
05 OUT-ST PIC X(32).
05 FILLER PIC X(4) VALUE ' '.
01 RPT-ERR-LINE.
05 FILLER PIC X(15) VALUE '***** FUNCTION '.
05 ERR-FUNCTION PIC X.
05 FILLER PIC X(7) VALUE ' GRC = '.
05 ERR-GRC PIC X(2).
05 FILLER PIC X(15) VALUE ' REASON CODE = '.
05 ERR-REASON PIC X.
05 FILLER PIC X(2) VALUE '. '.
05 OUT-ERR-MSG PIC X(80).
05 FILLER PIC X(9) VALUE ' '.
01 RPT-WRN-LINE.
05 FILLER PIC X(15) VALUE '***** FUNCTION '.
05 WRN-FUNCTION PIC X.
05 FILLER PIC X(15) VALUE ' WARNING GRC = '.
05 WRN-GRC PIC X(2).
05 FILLER PIC X(15) VALUE ' REASON CODE = '.
05 WRN-REASON PIC X.
05 FILLER PIC X(2) VALUE '. '.
05 OUT-WRN-MSG PIC X(80).
05 FILLER PIC X VALUE ' '.
01 RPT-HEADER-1.
05 FILLER PIC X(40) VALUE
'SAMPLE COBOL PROGRAM #2 EXECUTION OUTPUT'.
05 FILLER PIC X(72) VALUE ' '.
01 RPT-HEADER-2.
05 FILLER PIC X(58) VALUE
'*****----------------- INPUT INTERSECTION ----------------'.
05 FILLER PIC X(58) VALUE
'------***** *****------------ SELECTED OUTPUT ITEMS ------'.
05 FILLER PIC X(16) VALUE
'-------*****'.
01 RPT-HEADER-3.
05 FILLER PIC X(58) VALUE
'B IN-STREET-NAME-1 B IN-STREET-NAME-2 '.
05 FILLER PIC X(58) VALUE
' ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET '.
05 FILLER PIC X(16) VALUE
'NAMES '.
01 RPT-HEADER-4.
05 FILLER PIC X(58) VALUE
'_ ________________________________ _ _____________________'.
05 FILLER PIC X(58) VALUE
'___________ _____ __ ________ _______ ____________________'.
05 FILLER PIC X(16) VALUE
'____________ '.
01 FLAGS.
05 DATA-FLAG PIC XXX VALUE 'YES'.
88 MORE-DATA VALUE 'YES'.
88 NO-DATA VALUE 'NO '.
****************************************
PROCEDURE DIVISION.
OPEN INPUT IN-FILE, OUTPUT RPT-FILE.
WRITE RPT-LINE FROM RPT-HEADER-1 AFTER ADVANCING 1 LINES.
WRITE RPT-LINE FROM RPT-HEADER-2 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-HEADER-3 AFTER ADVANCING 2 LINES.
WRITE RPT-LINE FROM RPT-HEADER-4 AFTER ADVANCING 0 LINES.
READ IN-FILE AT END MOVE 'NO ' TO DATA-FLAG.
PERFORM PROCESS THRU PROCESS-EX
UNTIL NO-DATA.
CLOSE IN-FILE, RPT-FILE.
MOVE 0 TO RETURN-CODE
STOP RUN.
PROCESS.
******************************************************************
* TO MAKE A FUNCTION 2 CALL: *
* (1) INITIALIZE WORKAREA 1 TO SPACES *
* (2) SET WA1'S FUNCTION-CODE TO 2 *
* (3) SET THE PLATFORM INDICATOR SWITCH (NON-IBM-MAINFRAME) *
* TO USE CHARACTER-ONLY WORK AREAS (COWS) *
* (4) MOVE THE 1ST INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
* (5) MOVE THE 1ST INPUT STREET TO WA1'S INPUT STREET NAME *
* FIELD *
* (6) MOVE THE 2ND INPUT BORO TO WA1'S INPUT BORO CODE 2 FIELD *
* (7) MOVE THE 2ND INPUT STREET TO WA1'S INPUT STREET NAME 2 *
* FIELD *
* (8) CALL GBI WITH 2 WORKAREAS *
* (9) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
******************************************************************
MOVE SPACES TO WORK1.
MOVE '2 ' TO PIWA1-IN-FUNC-CODE.
MOVE 'C' TO GEO-WA1-IN-NON-IBM-MAIN-FRAME.
MOVE IN-BOR1 TO GEO-WA1-IN-BORO OUT-BOR1.
MOVE IN-BOR2 TO GEO-WA1-IN-BORO-2 OUT-BOR2.
MOVE IN-STREET1 TO GEO-WA1-IN-STREET-1 OUT-ST1.
MOVE IN-STREET2 TO GEO-WA1-IN-STREET-2 OUT-ST2.
CALL 'GBI' USING WORK1 WORK2.
IF GEO-WA1-OUT-RETURN-CODE NOT = 00
MOVE '2' TO ERR-FUNCTION WRN-FUNCTION
PERFORM PRINT-ERROR-LINE THRU P-E-EX.
IF (GEO-WA1-OUT-RETURN-CODE = 00) OR
(GEO-WA1-OUT-RETURN-CODE = 01)
PERFORM SUCCESSFUL-FUNC2 THRU S-F2-EX
ELSE
MOVE SPACES TO OUT-DETAIL
WRITE RPT-LINE FROM RPT-DATA-LINE1 AFTER ADVANCING 1 LINES.
READ IN-FILE AT END MOVE 'NO ' TO DATA-FLAG.
PROCESS-EX.
EXIT.
SUCCESSFUL-FUNC2.
***********************************************************
***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ***********
***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****
***********************************************************
MOVE GEO-WA2-FN2-ZIP TO OUT-ZIP.
MOVE GEO-WA2-FN2-COMDIST-NUMBER TO OUT-CD.
MOVE GEO-WA2-FN2-POL-PRECINCT TO OUT-NYPD-PCT.
MOVE GEO-WA2-FN2-SCHOOLDIST TO OUT-SCHLDIST.
* PROCESS CROSS STREET** CHECK FOR AT LEAST 1.
WRITE RPT-LINE FROM RPT-DATA-LINE1 AFTER ADVANCING 2 LINES.
PERFORM CALL-D THRU CALL-D-EX
VARYING I FROM 1 BY 1 UNTIL
(I > GEO-WA2-FN2-NUM-OF-INTERSECTS).
S-F2-EX.
EXIT.
CALL-D.
*****************************************************************
* TO GET STREET NAMES FOR INTERSECTING STREET CODES *
* MAKE A FUNCTION D CALL: *
* (1) INITIALIZE WORKAREA 1 TO SPACES *
* (2) SET THE WA1'S FUNCTION CODE FIELD TO D *
* (3) SET THE PLATFORM INDICATOR SWITCH (NON-IBM-MAINFRAME) *
* TO USE CHARACTER-ONLY WORK AREAS (COWS) *
* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
* STREET NAMES FORMATTED FOR DISPLAY *
* (5) MOVE THE BORO AND STREET CODE *
* WA1'S INPUT STREET CODE 1 FIELD *
* (6) CALL GBI WITH 1 WORKAREA *
* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*****************************************************************
MOVE SPACES TO WORK1.
MOVE 'D ' TO PIWA1-IN-FUNC-CODE.
MOVE 'C' TO GEO-WA1-IN-NON-IBM-MAIN-FRAME.
MOVE 'C' TO GEO-WA1-IN-COMPACT-NAME-FLAG.
MOVE '25' TO GEO-WA1-IN-SNL.
MOVE PIWA2-FN2-INTERSECT-B5SC (I)
TO GEO-WA1-IN-10SC-1
CALL 'GBI' USING WORK1.
IF GEO-WA1-OUT-RETURN-CODE NOT = 00
MOVE 'D' TO ERR-FUNCTION WRN-FUNCTION
PERFORM PRINT-ERROR-LINE THRU P-E-EX.
IF (GEO-WA1-OUT-RETURN-CODE = 00) OR
(GEO-WA1-OUT-RETURN-CODE = 01)
PERFORM SUCCESSFUL-FUNCD THRU S-FD-EX.
CALL-D-EX.
EXIT.
SUCCESSFUL-FUNCD.
MOVE GEO-WA1-OUT-STREET-1 TO OUT-ST
IF I = 1
WRITE RPT-LINE FROM RPT-DATA-LINE2 AFTER ADVANCING 0 LINES
ELSE
WRITE RPT-LINE FROM RPT-DATA-LINE2 AFTER ADVANCING 1 LINES.
S-FD-EX.
EXIT.
PRINT-ERROR-LINE.
MOVE GEO-WA1-OUT-RETURN-CODE TO ERR-GRC WRN-GRC.
MOVE GEO-WA1-OUT-REASON-CODE TO ERR-REASON WRN-REASON.
MOVE GEO-WA1-OUT-ERROR-MESSAGE TO OUT-ERR-MSG OUT-WRN-MSG.
IF GEO-WA1-OUT-RETURN-CODE = 01
**** INSERT YOUR OWN WARNING ROUTINE HERE ****
WRITE RPT-LINE FROM RPT-WRN-LINE AFTER ADVANCING 2 LINES
ELSE
**** INSERT YOUR OWN WARNING ROUTINE HERE ****
WRITE RPT-LINE FROM RPT-ERR-LINE AFTER ADVANCING 2 LINES.
P-E-EX.
EXIT.
/*
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//******************************************************************//
//* *//
//* AS OF GEOSUPPPORT VERSION 10.0, *//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP *//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: *//
//* A030.GEO.SUPPORT.PDSE.LOADLIB *//
//* A030.GEO.SUPPORT.LOADLIB *//
//* *//
//******************************************************************//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//******************************************************************//
//* *//
//* AS OF GEOSUPPPORT VERSION 10.0, *//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, ETC) *//
//* ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT IS TAILORED *//
//* TO USE STANDARD GEOSUPPORT DATA SET NAMES. *//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. *//
//* *//
//******************************************************************//
//*
//GO.SYSUDUMP DD SYSOUT=A,OUTLIM=3000
//GO.SYSOUT DD SYSOUT=A
//GO.RPTFILE DD SYSOUT=A
//GO.INFILE DD *
1 CHAMBERS ST 1 HUDSON ST
1 SIXTH AVE 1 W. 8 ST
1 DUANE ST 1 READE ST
/*
//
*****----------------- INPUT INTERSECTION ----------------------***** *****------------ SELECTED OUTPUT ITEMS ---*****
B IN-STREET-NAME-1 B IN-STREET-NAME-2 ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET NM
- -------------------------------- - -------------------------------- ----- -- -------- ------- ----------------------
1 CHAMBERS ST 1 HUDSON ST 10007 01 001 02 CHAMBERS STREET
HUDSON STREET
WEST BROADWAY
1 SIXTH AVE 1 W. 8 ST 10014 02 006 02 6 AVENUE
GREENWICH AVENUE
WEST 8 STREET
***** FUNCTION 2 GRC = 62 REASON CODE = . READE STREET & DUANE STREET DO NOT INTERSECT
1 DUANE ST 1 READE ST
ASSEMBLER SAMPLE PROGRAM #1
//ASMF1SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//** ASSEMBLER SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1 **
//** MSW FORMAT **
//********************************************************************
//STEP1 EXEC ASMACLG,
// PARM.ASM='OBJECT,NODECK',
// PARM.LKED='XREF,LET,LIST,NCAL'
//ASM.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
//ASM.SYSIN DD *
ASMF1SRC TITLE 'SAMPLE GEOSUPPORT ASSEMBLER PROGRAM 1 - MSW FORMAT'
ASMF1SRC CSECT
*****************************************************************
\* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING *
\* BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE.*
\* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. *
\* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
\* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
\* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET NAMES *
\* WOULD HAVE BEEN RETURNED BY FUNCTION 1. *
*****************************************************************
*
***********************************************************************
\* *
\* This program will do the following: *
\* *
\* * Read an instream record containing a house number, *
\* street name, and borough code *
\* *
\* * Build Work Area 1 for a Function 1 call *
\* *
\* * Call Function 1 *
\* *
\* * Get ZIP code, community district, police precinct, school *
\* district, and lists of street codes of streets intersecting *
\* at the low and high ends of the input street address's block. *
\* These will be displayed along with the input address which *
\* consists of borough code, house number, and street name. *
\* *
\* * Call Function D to get the street names of the first *
\* intersecting street on both low and high ends. *
\* *
\* * Print the information *
\* *
\* NOTE that after each Geosupport call, the Return Code is checked. *
\* If it is greater than 01, an error message is printed, and *
\* the next input record, if any, is read. *
\* If it is 01, a warning message is printed, the input record is *
\* processed, and the next record is read. *
\* If it is zero, the input record is processed, and the next *
\* record is read. *
\* *
***********************************************************************
SPACE
STM R14,R12,12(R13) Save caller's registers
LR R3,R15
LA R12,4095(,R3) (second base register
LA R12,1(,R12) to accomodate Work Areas 1 and 2)
USING ASMF1SRC,R3,R12
\* Chain save areas
LA R4,MYSAVE
ST R13,4(,R4) Save caller's savearea address
ST R4,8(,R13) Save pgm's savearea adr in caller savearea
LR R13,R4 Ensure that R13 points to pgm's savearea
SPACE 2
XR R15,R15 (set OS return code to zero)
\* Open input and output files
OPEN (INFILE,,OUTFILE,(OUTPUT))
TM INFILE+48,X'10' Did input file open successfully?
BNO INOPNERR (no..)
TM OUTFILE+48,X'10' Did output file open successfully?
BNO OUTOPNER (no..)
\* Print page and report header lines
SPACE
PUT OUTFILE,HDR1
PUT OUTFILE,HDR2
PUT OUTFILE,HDR3
PUT OUTFILE,HDR4
B NEXTREC
SPACE 2
TITLE 'READ IN-STREAM INPUT AND PREPARE FUNCTION 1 CALL'
\* Read (next) input record
NEXTREC DS 0H
GET INFILE,INREC
\* Move input data to output record for display
MVC DBORO,INBORO borough code
MVC DHSE(L'W1IHSE#),INHOUSE house number
MVC DSTRT,INSTREET street name
SPACE
*****************************************************************
\* TO MAKE A FUNCTION 1 CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO 1 *
\* (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
\* (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER *
\* FIELD *
\* (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
\* (6) CALL GBI WITH 2 WORKAREAS *
\* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*****************************************************************
\* Clear WA1 to blanks
LA R8,W1BAL "To" address for MVCL
LA R9,W1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
\* and do nothing else (the "from" address register is not used).
MVCL R8,R10
SPACE
\* Prime Work Area 1 for Function 1 call
MVC W1IFUNC,=CL2'1 ' Get function code
MVC W1IBORO1,INBORO borough code
MVC W1IHSE#(L'W1IHSE#),INHOUSE house number
MVC W1ISTRT1,INSTREET street name
MVC W1ISNL(L'W1ISNL),=C'25' Normalized street name length
** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\* *
\* As of Geosupport Version 10.1, *
\* to receive roadbed-specific information, *
\* set the Roadbed Request Switch to 'R', as follows: *
\* MVC W1IRBRQS,C'R' *
\* *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
\* Call Function 1 (2-Work-Area call)
CALL GBI,(W1BAL,W2BAL),VL
\* Check Return code
CLC W1ORC(2),=C'00' Good return?
BE PROCESS Yes, process returned data
\* Handle errors and warnings
ERREXIT DS 0H
CLC W1ORC(2),=C'01' Warning condition?
BE PUTWARN Yes, process warning
\* and then process input;
\* otherwise, process error
MVC ERINPUT,DSPLYIN Boro code, hse no., street name
MVC ERFUNC,W1IFUNC function code
MVC ERRET(L'W1ORC),W1ORC return code
MVC ERREAS(L'W1OREASN),W1OREASN reason code
PUT OUTFILE,ERR1 Print error messages 1
B PUTMSG and 2
PUTWARN DS 0H
MVC WRINPUT,DSPLYIN Boro code, hse no., street name
MVC WRFUNC,W1IFUNC function code
MVC WRRET(L'W1ORC),W1ORC return code
MVC WRREAS(L'W1OREASN),W1OREASN reason code
PUT OUTFILE,WRN1 Print warning messages 1
PUTMSG DS 0H and 2
MVC ERRWRN(L'W1OERROR),W1OERROR
PUT OUTFILE,ERRWRN2 Print error/warning message 2
CLC W1ORC(2),=C'01' Warning condition?
BNE NEXTREC No, get next record, if any
MVI OINPUT,C' ' Yes,
MVC OINPUT+1(L'OINPUT-1),OINPUT ensure input NOT displayd
MVI OUTVALID,C' ' ensure single-spacing after warning
B GETZIP and continue normal processing
SPACE
\* Handle successful Geosupport calls (Return Code <= 01)
PROCESS DS 0H
MVC OINPUT,DSPLYIN Boro code, hse no., street name
MVI OUTVALID,C'0' Ensure double-spacing
GETZIP DS 0H
MVC OZIP,W2F1ZIP ZIP code
MVC OCOMM,W2F1CDN community district number
MVC OPCT,W2F1POP police precinct
MVC OSCHL,W2F1SCH school district
ASSEMBLER SAMPLE PROGRAM #1- Job stream- MSW (continue
***** At this point, clear WA1 again, call Function D, and move ******
***** its reported Low and High Instersecting Street Names to output *
TITLE 'GET LOW, HIGH INTERSECTING STREETS, USING FUNCTION D'
SPACE 2
*************************************************************
\* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND *
\* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE *
\* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS *
\* FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO D *
\* (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED *
\* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE *
\* HAS SPACE FOR ONLY 25 CHARACTERS) *
\* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
\* STREET NAMES FORMATTED FOR DISPLAY *
\* (5) MOVE WA2'S LOW PBSC FIELD TO WA1'S INPUT STREET *
\* CODE 1 FIELD *
\* (6) MOVE WA2'S HIGH PBSC FIELD TO WA1'S INPUT STREET *
\* CODE 2 FIELD *
\* (7) CALL GBI WITH 1 WORKAREA *
\* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*************************************************************
SPACE
\* Clear WA1 to blanks
LA R8,W1BAL "To" address for MVCL
LA R9,W1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
\* and do nothing else (the "from" address register is not used).
MVCL R8,R10
MVC W1ICDE1,W2F1CDEL
MVC W1ICDE2,W2F1CDEH
MVC W1IFUNC(2),=CL2'D '
MVC W1ISNL(L'W1ISNL),=C'25' normalized street name length
MVI W1ICMPCT,C'C' streets to be compacted
CALL GBI,W1BAL,VL Call Function D
\* Check Return code
CLC W1ORC(2),=C'00' Good return?
BNE ERREXIT No, error or warning
\* Yes, complete the record
\* and write it out
PUTREC DS 0H
MVC OLOSTRT,W1OSTRT1
MVC OHISTRT,W1OSTRT2
\* Print an output record and get the next input record, if any
PUT OUTFILE,OUTVALID
B NEXTREC
EXIT DS 0H
OUTOPNER DS 0H
CLOSE (INFILE)
TM OUTFILE+48,X'10' Did OUTFILE open successfully?
BNO INOPNERR No, bypass closing it
CLOSE (OUTFILE)
ASSEMBLER SAMPLE PROGRAM #1- Job stream- MSW (continue)
INOPNERR DS 0H
L R13,4(,R13)
L R14,12(,R13)
LM R0,R12,20(R13)
BR R14
SPACE 2
PARAMERR DS 0H parameter error, missing or invalid
LA R15,8 rc=8
B EXIT
TITLE 'DATA SECTION - REGISTER ASSIGNMENTS'
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
TITLE 'FILE AND RECORD DEFINITIONS'
PUSH PRINT
PRINT NOGEN
INFILE DCB DSORG=PS,MACRF=(GM),DDNAME=INFILE, *
RECFM=FB,LRECL=80,BLKSIZE=400,EODAD=EXIT
SPACE
OUTFILE DCB DSORG=PS,MACRF=(PM),DDNAME=SYSPRINT, *
RECFM=FBA,LRECL=133,BLKSIZE=1330
*
POP PRINT
SPACE
INREC DS 0CL80 Input record
INBORO DS CL1 Borough code
INHOUSE DS CL12 House number
INSTREET DS CL32 Street name
DC 35C' ' filler
SPACE
\* Output records: error, warning, and normal
ERR1 DS 0CL133
DC C'0'
ERINPUT DS CL48
DC C'*** FUNCTION '
ERFUNC DS CL2
DC C' GRC = '
ERRET DS CL2
DC C' REASON CODE = '
ERREAS DS CL1
DC CL(133-89)' '
SPACE
WRN1 DS 0CL133
DC C'0'
WRINPUT DS CL48
DC C'*** FUNCTION '
WRFUNC DS CL2
DC C' WARNING, GRC = '
WRRET DS CL2
DC C' REASON CODE = '
WRREAS DS CL1
DC CL(133-98)' '
SPACE
ERRWRN2 DS 0CL133
DC C' '
DC 48C' ' Boro Code, House Number, Street Name
DC CL4'*** '
ERRWRN DS CL80 Error/Warning message
SPACE
HDR1 DC CL133'1SAMPLE ASSEMBLER \#1 EXECUTION OUTPUT *
'
HDR2 DC CL133'0*****---------- INPUT ADDRESS ------------***** \*C
****--------------------- SELECTED OUTPUT ITEMS --------C
----------------------*****'
HDR3 DC CL133'0B HOUSE NUMBER IN-STREET-NAME *
ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET HIGH *
CROSS STREET '
HDR4 DC CL133' - ------------ -------------------------------- -*
---- -- -------- ------- ------------------------- -----*
---------------------------'
OUTVALID DS 0CL133
\* Borough code, house number, and street name are from input record
DC C'0'
OINPUT DS CL48
OZIP DS CL5
DC C' '
OCOMM DS CL2
DC C' '
OPCT DS CL3
DC 6C' '
OSCHL DS CL2
DC 6C' '
OLOSTRT DS CL25 Normalized name of intersecting street at low end
DC C' '
OHISTRT DS CL25 Normalized name of intersecting street at high end
DC 7C' '
TITLE 'WORKING VARIABLES, VALUES, ETC.'
MYSAVE DC 18F'0'
***********************************************************************
***** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
***** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
***********************************************************************
COPY W1BAL COPY WORK AREA 1
EJECT
COPY W2BAL COPY WORK AREA 2
EJECT
SPACE 2
DSPLYIN DS 0CL48
DBORO DS CL1
DC C' '
DHSE DS CL12
DC C' '
DSTRT DS CL32
DC C' '
SPACE 2
TITLE 'CONSTANTS AND LITERAL POOL'
SPACE 2
LTORG
END ASMF1SRC
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
/*
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
//* DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, \*//
//* ETC) ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT \*//
//* IS TAILORED TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//*
//SYSUDUMP DD SYSOUT=\*,OUTLIM=2000
//SYSPRINT DD SYSOUT=*
//INFILE DD *
122 READE ST
1500 DUANE ST
12-4 BROADWAY
4165-100 BAISLEY BLVD
4165-1000 BAISLEY BLVD
/*
//
//ASMC1SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//** ASSEMBLER SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1 **
//** COW FORMAT **
//********************************************************************
//STEP1 EXEC ASMACLG,
// PARM.ASM='OBJECT,NODECK',
// PARM.LKED='XREF,LET,LIST,NCAL'
//ASM.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
//ASM.SYSIN DD *
ASMC1SRC TITLE 'SAMPLE GEOSUPPORT ASSEMBLER PROGRAM 1 - COW FORMAT'
ASMC1SRC CSECT
*****************************************************************
\* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING *
\* BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE.*
\* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. *
\* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
\* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
\* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET NAMES *
\* WOULD HAVE BEEN RETURNED BY FUNCTION 1. *
*****************************************************************
*
***********************************************************************
\* *
\* This program will do the following: *
\* *
\* * Read an instream record containing a house number, *
\* street name, and borough code *
\* *
\* * Build Work Area 1 for a Function 1 call *
\* *
\* * Call Function 1 *
\* *
\* * Get ZIP code, community district, police precinct, school *
\* district, and lists of street codes of streets intersecting *
\* at the low and high ends of the input street address's block. *
\* These will be displayed along with the input address which *
\* consists of borough code, house number, and street name. *
\* *
\* * Call Function D to get the street names of the first *
\* intersecting street on both low and high ends. *
\* *
\* * Print the information *
\* *
\* NOTE that after each Geosupport call, the Return Code is checked. *
\* If it is greater than 01, an error message is printed, and *
\* the next input record, if any, is read. *
\* If it is 01, a warning message is printed, the input record is *
\* processed, and the next record is read. *
\* If it is zero, the input record is processed, and the next *
\* record is read. *
\* *
***********************************************************************
SPACE
STM R14,R12,12(R13) Save caller's registers
LR R3,R15
LA R12,4095(,R3) (second base register
LA R12,1(,R12) to accomodate Work Areas 1 and 2)
USING ASMC1SRC,R3,R12
\* Chain save areas
LA R4,MYSAVE
ST R13,4(,R4) Save caller's savearea address
ST R4,8(,R13) Save pgm's savearea adr in caller savearea
LR R13,R4 Ensure that R13 points to pgm's savearea
SPACE 2
XR R15,R15 (set OS return code to zero)
\* Open input and output files
OPEN (INFILE,,OUTFILE,(OUTPUT))
TM INFILE+48,X'10' Did input file open successfully?
BNO INOPNERR (no..)
TM OUTFILE+48,X'10' Did output file open successfully?
BNO OUTOPNER (no..)
\* Print page and report header lines
SPACE
PUT OUTFILE,HDR1
PUT OUTFILE,HDR2
PUT OUTFILE,HDR3
PUT OUTFILE,HDR4
B NEXTREC
SPACE 2
TITLE 'READ IN-STREAM INPUT AND PREPARE FUNCTION 1 CALL'
\* Read (next) input record
NEXTREC DS 0H
GET INFILE,INREC
\* Move input data to output record for display
MVC DBORO,INBORO borough code
MVC DHSE(L'INHOUSE),INHOUSE house number
MVC DSTRT,INSTREET street name
SPACE
*****************************************************************
\* TO MAKE A FUNCTION 1 CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO 1 *
\* (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
\* (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER *
\* FIELD *
\* (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
\* (6) CALL GBI WITH 2 WORKAREAS *
\* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*****************************************************************
\* Clear WA1 to blanks
LA R8,P1BAL "To" address for MVCL
LA R9,P1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
\* and do nothing else (the "from" address register is not used).
MVCL R8,R10
SPACE
\* Prime Work Area 1 for Function 1 call
MVI P1IPLIND,C'C' Set Work Area Format to COW
MVC P1IFUNC,=CL2'1 ' Get function code
MVC P1IBORO1,INBORO borough code
*
\* Note COW - MSW: Display House # - P1IHSE# is a 16-byte field
\* W1IHSE# is a 12-byte field
*
MVC P1IHSE#(L'INHOUSE),INHOUSE house number
MVC P1ISTRT1,INSTREET street name
*
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\* *
\* As of Geosupport Version 10.1, *
\* to receive roadbed-specific information, *
\* set the Roadbed Request Switch to 'R', as follows: *
\* MVC P1IRBRQS,C'R' *
\* *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
MVC P1ISNL(L'P1ISNL),=C'25' Normalized street name length
\* Call Function 1 (2-Work-Area call)
CALL GBI,(P1BAL,P2BAL),VL
\* Check Return code
CLC P1ORC(2),=C'00' Good return?
BE PROCESS Yes, process returned data
\* Handle errors and warnings
ERREXIT DS 0H
CLC P1ORC(2),=C'01' Warning condition?
BE PUTWARN Yes, process warning
\* and then process input;
\* otherwise, process error
MVC ERINPUT,DSPLYIN Boro code, hse no., street name
MVC ERFUNC,P1IFUNC function code
MVC ERRET(L'P1ORC),P1ORC return code
MVC ERREAS(L'P1OREASN),P1OREASN reason code
PUT OUTFILE,ERR1 Print error messages 1
B PUTMSG and 2
PUTWARN DS 0H
MVC WRINPUT,DSPLYIN Boro code, hse no., street name
MVC WRFUNC,P1IFUNC function code
MVC WRRET(L'P1ORC),P1ORC return code
MVC WRREAS(L'P1OREASN),P1OREASN reason code
PUT OUTFILE,WRN1 Print warning messages 1
PUTMSG DS 0H and 2
MVC ERRWRN(L'P1OERROR),P1OERROR
PUT OUTFILE,ERRWRN2 Print error/warning message 2
CLC P1ORC(2),=C'01' Warning condition?
BNE NEXTREC No, get next record, if any
MVI OINPUT,C' ' Yes,
MVC OINPUT+1(L'OINPUT-1),OINPUT ensure input NOT displayd
MVI OUTVALID,C' ' ensure single-spacing after warning
B GETZIP and continue normal processing
SPACE
\* Handle successful Geosupport calls (Return Code <= 01)
PROCESS DS 0H
MVC OINPUT,DSPLYIN Boro code, hse no., street name
MVI OUTVALID,C'0' Ensure double-spacing
GETZIP DS 0H
MVC OZIP,P2F1ZIP ZIP code
MVC OCOMM,P2F1CDN community district number
MVC OPCT,P2F1POP police precinct
MVC OSCHL,P2F1SCH school district
***** At this point, clear WA1 again, call Function D, and move ******
***** its reported Low and High Intersecting Street Names to output *
TITLE 'GET LOW, HIGH INTERSECTING STREETS, USING FUNCTION D'
SPACE 2
*************************************************************
\* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND *
\* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE *
\* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS *
\* FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO D *
\* (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED *
\* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE *
\* HAS SPACE FOR ONLY 25 CHARACTERS) *
\* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
\* STREET NAMES FORMATTED FOR DISPLAY *
\* (5) MOVE WA2'S LOW B5SC FIELD TO WA1'S INPUT STREET *
\* CODE 1 FIELD *
\* (6) MOVE WA2'S HIGH B5SC FIELD TO WA1'S INPUT STREET *
\* CODE 2 FIELD *
\* (7) CALL GBI WITH 1 WORKAREA *
\* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*************************************************************
SPACE
\* Clear WA1 to blanks
LA R8,P1BAL "To" address for MVCL
LA R9,P1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
and do nothing else (the "from" address register is not used).
MVCL R8,R10
MVI P1IPLIND,C'C' Set Work Area Format to COW
*
\* Note COW - MSW: P1ICDEx is the 10-digit street code (no boro)
\* P1IBCDx is the Boro and 10-digit street code
\* W1ICDEx is the packed Boro and 5-digit street code
\* P2F1CDEx is Boro and 5-digit street code list
\* W2F1CDEx is packed Boro and 5-digit street code list
*
MVC P1IBCD1(6),P2F1CDEL
MVC P1IBCD2(6),P2F1CDEH
MVC P1IFUNC(2),=CL2'D '
MVC P1ISNL(L'P1ISNL),=C'25' normalized street name length
MVI P1ICMPCT,C'C' streets to be compacted
CALL GBI,P1BAL,VL Call Function D
\* Check Return code
CLC P1ORC(2),=C'00' Good return?
BNE ERREXIT No, error or warning
\* Yes, complete the record
\* and write it out
PUTREC DS 0H
MVC OLOSTRT,P1OSTRT1
MVC OHISTRT,P1OSTRT2
\* Print an output record and get the next input record, if any
PUT OUTFILE,OUTVALID
B NEXTREC
EXIT DS 0H
OUTOPNER DS 0H
CLOSE (INFILE)
TM OUTFILE+48,X'10' Did OUTFILE open successfully?
BNO INOPNERR No, bypass closing it
CLOSE (OUTFILE)
INOPNERR DS 0H
L R13,4(,R13)
L R14,12(,R13)
LM R0,R12,20(R13)
BR R14
SPACE 2
PARAMERR DS 0H parameter error, missing or invalid
LA R15,8 rc=8
B EXIT
TITLE 'DATA SECTION - REGISTER ASSIGNMENTS'
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
TITLE 'FILE AND RECORD DEFINITIONS'
PUSH PRINT
PRINT NOGEN
INFILE DCB DSORG=PS,MACRF=(GM),DDNAME=INFILE, *
RECFM=FB,LRECL=80,BLKSIZE=400,EODAD=EXIT
SPACE
OUTFILE DCB DSORG=PS,MACRF=(PM),DDNAME=SYSPRINT, *
RECFM=FBA,LRECL=133,BLKSIZE=1330
*
POP PRINT
SPACE
INREC DS 0CL80 Input record
INBORO DS CL1 Borough code
INHOUSE DS CL12 House number
INSTREET DS CL32 Street name
DC 35C' ' filler
SPACE
\* Output records: error, warning, and normal
ERR1 DS 0CL133
DC C'0'
ERINPUT DS CL48
DC C'*** FUNCTION '
ERFUNC DS CL2
DC C' GRC = '
ERRET DS CL2
DC C' REASON CODE = '
ERREAS DS CL1
DC CL(133-89)' '
SPACE
WRN1 DS 0CL133
DC C'0'
WRINPUT DS CL48
DC C'*** FUNCTION '
WRFUNC DS CL2
DC C' WARNING, GRC = '
WRRET DS CL2
DC C' REASON CODE = '
WRREAS DS CL1
DC CL(133-98)' '
SPACE
ERRWRN2 DS 0CL133
DC C' '
DC 48C' ' Boro Code, House Number, Street Name
DC CL4'*** '
ERRWRN DS CL80 Error/Warning message
SPACE
HDR1 DC CL133'1SAMPLE ASSEMBLER \#1 EXECUTION OUTPUT *
'
HDR2 DC CL133'0*****---------- INPUT ADDRESS ------------***** \*C
****--------------------- SELECTED OUTPUT ITEMS --------C
----------------------*****'
HDR3 DC CL133'0B HOUSE NUMBER IN-STREET-NAME *
ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET HIGH *
CROSS STREET '
HDR4 DC CL133' - ------------ -------------------------------- -*
---- -- -------- ------- ------------------------- -----*
---------------------------'
OUTVALID DS 0CL133
\* Borough code, house number, and street name are from input record
DC C'0'
OINPUT DS CL48
OZIP DS CL5
DC C' '
OCOMM DS CL2
DC C' '
OPCT DS CL3
DC 6C' '
OSCHL DS CL2
DC 6C' '
OLOSTRT DS CL25 Normalized name of intersecting street at low end
DC C' '
OHISTRT DS CL25 Normalized name of intersecting street at high end
DC 7C' '
TITLE 'WORKING VARIABLES, VALUES, ETC.'
MYSAVE DC 18F'0'
***********************************************************************
***** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
***** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
***********************************************************************
COPY P1BAL COPY WORK AREA 1
EJECT
COPY P2BAL COPY WORK AREA 2
EJECT
SPACE 2
DSPLYIN DS 0CL48
DBORO DS CL1
DC C' '
DHSE DS CL12
DC C' '
DSTRT DS CL32
DC C' '
SPACE 2
TITLE 'CONSTANTS AND LITERAL POOL'
SPACE 2
LTORG
END ASMC1SRC
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
/*
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* GEO.SUPPORT.PDSE.LOADLIB AND GEO.SUPPORT.LOADLIB \*//
//* ARE REQUIRED IN THE STEPLIB (OR JOBLIB) OF THE \*//
//* GEOSUPPORT EXECUTION STEP. \*//
//* \*//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
//* DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS ARE NO LONGER USED TO DEFINE? \*//
//* GEOSUPPORT DATA FILES. \*//
//* DD STATEMENTS ARE NO LONGER INCLUDED FOR THE \*//
//* GEOSUPPORT FOREGROUND FILES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER \*//
//* \*//
//SYSUDUMP DD SYSOUT=\*,OUTLIM=2000
//SYSPRINT DD SYSOUT=*
//INFILE DD *
122 READE ST
1500 DUANE ST
12-4 BROADWAY
4165-100 BAISLEY BLVD
4165-1000 BAISLEY BLVD
/*
//
<center><b>ASSEMBLER SAMPLE PROGRAM \#1 –Job Stream-COW</b></center>
//ASMC1SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//** ASSEMBLER SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1 **
//** COW FORMAT **
//********************************************************************
//STEP1 EXEC ASMACLG,
// PARM.ASM='OBJECT,NODECK',
// PARM.LKED='XREF,LET,LIST,NCAL'
//ASM.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
//ASM.SYSIN DD *
ASMC1SRC TITLE 'SAMPLE GEOSUPPORT ASSEMBLER PROGRAM 1 - COW FORMAT'
ASMC1SRC CSECT
*****************************************************************
\* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING *
\* BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE.*
\* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. *
\* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
\* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
\* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET NAMES *
\* WOULD HAVE BEEN RETURNED BY FUNCTION 1. *
*****************************************************************
*
***********************************************************************
\* *
\* This program will do the following: *
\* *
\* * Read an instream record containing a house number, *
\* street name, and borough code *
\* *
\* * Build Work Area 1 for a Function 1 call *
\* *
\* * Call Function 1 *
\* *
\* * Get ZIP code, community district, police precinct, school *
\* district, and lists of street codes of streets intersecting *
\* at the low and high ends of the input street address's block. *
\* These will be displayed along with the input address which *
\* consists of borough code, house number, and street name. *
\* *
\* * Call Function D to get the street names of the first *
\* intersecting street on both low and high ends. *
\* *
\* * Print the information *
\* *
\* NOTE that after each Geosupport call, the Return Code is checked. *
\* If it is greater than 01, an error message is printed, and *
\* the next input record, if any, is read. *
\* If it is 01, a warning message is printed, the input record is *
\* processed, and the next record is read. *
\* If it is zero, the input record is processed, and the next *
\* record is read. *
\* *
***********************************************************************
SPACE
STM R14,R12,12(R13) Save caller's registers
LR R3,R15
LA R12,4095(,R3) (second base register
LA R12,1(,R12) to accomodate Work Areas 1 and 2)
USING ASMC1SRC,R3,R12
\* Chain save areas
LA R4,MYSAVE
ST R13,4(,R4) Save caller's savearea address
ST R4,8(,R13) Save pgm's savearea adr in caller savearea
LR R13,R4 Ensure that R13 points to pgm's savearea
SPACE 2
XR R15,R15 (set OS return code to zero)
\* Open input and output files
OPEN (INFILE,,OUTFILE,(OUTPUT))
TM INFILE+48,X'10' Did input file open successfully?
BNO INOPNERR (no..)
TM OUTFILE+48,X'10' Did output file open successfully?
BNO OUTOPNER (no..)
\* Print page and report header lines
SPACE
PUT OUTFILE,HDR1
PUT OUTFILE,HDR2
PUT OUTFILE,HDR3
PUT OUTFILE,HDR4
B NEXTREC
SPACE 2
TITLE 'READ IN-STREAM INPUT AND PREPARE FUNCTION 1 CALL'
\* Read (next) input record
NEXTREC DS 0H
GET INFILE,INREC
\* Move input data to output record for display
MVC DBORO,INBORO borough code
MVC DHSE(L'INHOUSE),INHOUSE house number
MVC DSTRT,INSTREET street name
SPACE
*****************************************************************
\* TO MAKE A FUNCTION 1 CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO 1 *
\* (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
\* (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER *
\* FIELD *
\* (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
\* (6) CALL GBI WITH 2 WORKAREAS *
\* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*****************************************************************
\* Clear WA1 to blanks
LA R8,P1BAL "To" address for MVCL
LA R9,P1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
\* and do nothing else (the "from" address register is not used).
MVCL R8,R10
SPACE
\* Prime Work Area 1 for Function 1 call
MVI P1IPLIND,C'C' Set Work Area Format to COW
MVC P1IFUNC,=CL2'1 ' Get function code
MVC P1IBORO1,INBORO borough code
*
\* Note COW - MSW: Display House # - P1IHSE# is a 16-byte field
\* W1IHSE# is a 12-byte field
*
MVC P1IHSE#(L'INHOUSE),INHOUSE house number
MVC P1ISTRT1,INSTREET street name
*
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\* *
\* As of Geosupport Version 10.1, *
\* to receive roadbed-specific information, *
\* set the Roadbed Request Switch to 'R', as follows: *
\* MVC P1IRBRQS,C'R' *
\* *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
MVC P1ISNL(L'P1ISNL),=C'25' Normalized street name length
\* Call Function 1 (2-Work-Area call)
CALL GBI,(P1BAL,P2BAL),VL
\* Check Return code
CLC P1ORC(2),=C'00' Good return?
BE PROCESS Yes, process returned data
\* Handle errors and warnings
ERREXIT DS 0H
CLC P1ORC(2),=C'01' Warning condition?
BE PUTWARN Yes, process warning
\* and then process input;
\* otherwise, process error
MVC ERINPUT,DSPLYIN Boro code, hse no., street name
MVC ERFUNC,P1IFUNC function code
MVC ERRET(L'P1ORC),P1ORC return code
MVC ERREAS(L'P1OREASN),P1OREASN reason code
PUT OUTFILE,ERR1 Print error messages 1
B PUTMSG and 2
PUTWARN DS 0H
MVC WRINPUT,DSPLYIN Boro code, hse no., street name
MVC WRFUNC,P1IFUNC function code
MVC WRRET(L'P1ORC),P1ORC return code
MVC WRREAS(L'P1OREASN),P1OREASN reason code
PUT OUTFILE,WRN1 Print warning messages 1
PUTMSG DS 0H and 2
MVC ERRWRN(L'P1OERROR),P1OERROR
PUT OUTFILE,ERRWRN2 Print error/warning message 2
CLC P1ORC(2),=C'01' Warning condition?
BNE NEXTREC No, get next record, if any
MVI OINPUT,C' ' Yes,
MVC OINPUT+1(L'OINPUT-1),OINPUT ensure input NOT displayd
MVI OUTVALID,C' ' ensure single-spacing after warning
B GETZIP and continue normal processing
SPACE
\* Handle successful Geosupport calls (Return Code <= 01)
PROCESS DS 0H
MVC OINPUT,DSPLYIN Boro code, hse no., street name
MVI OUTVALID,C'0' Ensure double-spacing
GETZIP DS 0H
MVC OZIP,P2F1ZIP ZIP code
MVC OCOMM,P2F1CDN community district number
MVC OPCT,P2F1POP police precinct
MVC OSCHL,P2F1SCH school district
***** At this point, clear WA1 again, call Function D, and move ******
***** its reported Low and High Intersecting Street Names to output *
TITLE 'GET LOW, HIGH INTERSECTING STREETS, USING FUNCTION D'
SPACE 2
*************************************************************
\* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND *
\* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE *
\* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS *
\* FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO D *
\* (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED *
\* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE *
\* HAS SPACE FOR ONLY 25 CHARACTERS) *
\* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
\* STREET NAMES FORMATTED FOR DISPLAY *
\* (5) MOVE WA2'S LOW B5SC FIELD TO WA1'S INPUT STREET *
\* CODE 1 FIELD *
\* (6) MOVE WA2'S HIGH B5SC FIELD TO WA1'S INPUT STREET *
\* CODE 2 FIELD *
\* (7) CALL GBI WITH 1 WORKAREA *
\* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*************************************************************
SPACE
\* Clear WA1 to blanks
LA R8,P1BAL "To" address for MVCL
LA R9,P1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
and do nothing else (the "from" address register is not used).
MVCL R8,R10
MVI P1IPLIND,C'C' Set Work Area Format to COW
*
\* Note COW - MSW: P1ICDEx is the 10-digit street code (no boro)
\* P1IBCDx is the Boro and 10-digit street code
\* W1ICDEx is the packed Boro and 5-digit street code
\* P2F1CDEx is Boro and 5-digit street code list
\* W2F1CDEx is packed Boro and 5-digit street code list
*
MVC P1IBCD1(6),P2F1CDEL
MVC P1IBCD2(6),P2F1CDEH
MVC P1IFUNC(2),=CL2'D '
MVC P1ISNL(L'P1ISNL),=C'25' normalized street name length
MVI P1ICMPCT,C'C' streets to be compacted
CALL GBI,P1BAL,VL Call Function D
\* Check Return code
CLC P1ORC(2),=C'00' Good return?
BNE ERREXIT No, error or warning
\* Yes, complete the record
\* and write it out
PUTREC DS 0H
MVC OLOSTRT,P1OSTRT1
MVC OHISTRT,P1OSTRT2
\* Print an output record and get the next input record, if any
PUT OUTFILE,OUTVALID
B NEXTREC
EXIT DS 0H
OUTOPNER DS 0H
CLOSE (INFILE)
TM OUTFILE+48,X'10' Did OUTFILE open successfully?
BNO INOPNERR No, bypass closing it
CLOSE (OUTFILE)
INOPNERR DS 0H
L R13,4(,R13)
L R14,12(,R13)
LM R0,R12,20(R13)
BR R14
SPACE 2
PARAMERR DS 0H parameter error, missing or invalid
LA R15,8 rc=8
B EXIT
TITLE 'DATA SECTION - REGISTER ASSIGNMENTS'
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
TITLE 'FILE AND RECORD DEFINITIONS'
PUSH PRINT
PRINT NOGEN
INFILE DCB DSORG=PS,MACRF=(GM),DDNAME=INFILE, *
RECFM=FB,LRECL=80,BLKSIZE=400,EODAD=EXIT
SPACE
OUTFILE DCB DSORG=PS,MACRF=(PM),DDNAME=SYSPRINT, *
RECFM=FBA,LRECL=133,BLKSIZE=1330
*
POP PRINT
SPACE
INREC DS 0CL80 Input record
INBORO DS CL1 Borough code
INHOUSE DS CL12 House number
INSTREET DS CL32 Street name
DC 35C' ' filler
SPACE
\* Output records: error, warning, and normal
ERR1 DS 0CL133
DC C'0'
ERINPUT DS CL48
DC C'*** FUNCTION '
ERFUNC DS CL2
DC C' GRC = '
ERRET DS CL2
DC C' REASON CODE = '
ERREAS DS CL1
DC CL(133-89)' '
SPACE
WRN1 DS 0CL133
DC C'0'
WRINPUT DS CL48
DC C'*** FUNCTION '
WRFUNC DS CL2
DC C' WARNING, GRC = '
WRRET DS CL2
DC C' REASON CODE = '
WRREAS DS CL1
DC CL(133-98)' '
SPACE
ERRWRN2 DS 0CL133
DC C' '
DC 48C' ' Boro Code, House Number, Street Name
DC CL4'*** '
ERRWRN DS CL80 Error/Warning message
SPACE
HDR1 DC CL133'1SAMPLE ASSEMBLER \#1 EXECUTION OUTPUT *
'
HDR2 DC CL133'0*****---------- INPUT ADDRESS ------------***** \*C
****--------------------- SELECTED OUTPUT ITEMS --------C
----------------------*****'
HDR3 DC CL133'0B HOUSE NUMBER IN-STREET-NAME *
ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET HIGH *
CROSS STREET '
HDR4 DC CL133' - ------------ -------------------------------- -*
---- -- -------- ------- ------------------------- -----*
---------------------------'
OUTVALID DS 0CL133
\* Borough code, house number, and street name are from input record
DC C'0'
OINPUT DS CL48
OZIP DS CL5
DC C' '
OCOMM DS CL2
DC C' '
OPCT DS CL3
DC 6C' '
OSCHL DS CL2
DC 6C' '
OLOSTRT DS CL25 Normalized name of intersecting street at low end
DC C' '
OHISTRT DS CL25 Normalized name of intersecting street at high end
DC 7C' '
TITLE 'WORKING VARIABLES, VALUES, ETC.'
MYSAVE DC 18F'0'
***********************************************************************
***** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
***** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
***********************************************************************
COPY P1BAL COPY WORK AREA 1
EJECT
COPY P2BAL COPY WORK AREA 2
EJECT
SPACE 2
DSPLYIN DS 0CL48
DBORO DS CL1
DC C' '
DHSE DS CL12
DC C' '
DSTRT DS CL32
DC C' '
SPACE 2
TITLE 'CONSTANTS AND LITERAL POOL'
SPACE 2
LTORG
END ASMC1SRC
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
/*
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* GEO.SUPPORT.PDSE.LOADLIB AND GEO.SUPPORT.LOADLIB \*//
//* ARE REQUIRED IN THE STEPLIB (OR JOBLIB) OF THE \*//
//* GEOSUPPORT EXECUTION STEP. \*//
//* \*//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
//* DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS ARE NO LONGER USED TO DEFINE? \*//
//* GEOSUPPORT DATA FILES. \*//
//* DD STATEMENTS ARE NO LONGER INCLUDED FOR THE \*//
//* GEOSUPPORT FOREGROUND FILES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER \*//
//* \*//
//SYSUDUMP DD SYSOUT=\*,OUTLIM=2000
//SYSPRINT DD SYSOUT=*
//INFILE DD *
122 READE ST
1500 DUANE ST
12-4 BROADWAY
4165-100 BAISLEY BLVD
4165-1000 BAISLEY BLVD
/*
//
//ASMC1SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//** ASSEMBLER SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1 **
//** COW FORMAT **
//********************************************************************
//STEP1 EXEC ASMACLG,
// PARM.ASM='OBJECT,NODECK',
// PARM.LKED='XREF,LET,LIST,NCAL'
//ASM.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
//ASM.SYSIN DD *
ASMC1SRC TITLE 'SAMPLE GEOSUPPORT ASSEMBLER PROGRAM 1 - COW FORMAT'
ASMC1SRC CSECT
*****************************************************************
\* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING *
\* BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE.*
\* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. *
\* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
\* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
\* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET NAMES *
\* WOULD HAVE BEEN RETURNED BY FUNCTION 1. *
*****************************************************************
*
***********************************************************************
\* *
\* This program will do the following: *
\* *
\* * Read an instream record containing a house number, *
\* street name, and borough code *
\* *
\* * Build Work Area 1 for a Function 1 call *
\* *
\* * Call Function 1 *
\* *
\* * Get ZIP code, community district, police precinct, school *
\* district, and lists of street codes of streets intersecting *
\* at the low and high ends of the input street address's block. *
\* These will be displayed along with the input address which *
\* consists of borough code, house number, and street name. *
\* *
\* * Call Function D to get the street names of the first *
\* intersecting street on both low and high ends. *
\* *
\* * Print the information *
\* *
\* NOTE that after each Geosupport call, the Return Code is checked. *
\* If it is greater than 01, an error message is printed, and *
\* the next input record, if any, is read. *
\* If it is 01, a warning message is printed, the input record is *
\* processed, and the next record is read. *
\* If it is zero, the input record is processed, and the next *
\* record is read. *
\* *
***********************************************************************
SPACE
STM R14,R12,12(R13) Save caller's registers
LR R3,R15
LA R12,4095(,R3) (second base register
LA R12,1(,R12) to accomodate Work Areas 1 and 2)
USING ASMC1SRC,R3,R12
\* Chain save areas
LA R4,MYSAVE
ST R13,4(,R4) Save caller's savearea address
ST R4,8(,R13) Save pgm's savearea adr in caller savearea
LR R13,R4 Ensure that R13 points to pgm's savearea
SPACE 2
XR R15,R15 (set OS return code to zero)
\* Open input and output files
OPEN (INFILE,,OUTFILE,(OUTPUT))
TM INFILE+48,X'10' Did input file open successfully?
BNO INOPNERR (no..)
TM OUTFILE+48,X'10' Did output file open successfully?
BNO OUTOPNER (no..)
\* Print page and report header lines
SPACE
PUT OUTFILE,HDR1
PUT OUTFILE,HDR2
PUT OUTFILE,HDR3
PUT OUTFILE,HDR4
B NEXTREC
SPACE 2
TITLE 'READ IN-STREAM INPUT AND PREPARE FUNCTION 1 CALL'
\* Read (next) input record
NEXTREC DS 0H
GET INFILE,INREC
\* Move input data to output record for display
MVC DBORO,INBORO borough code
MVC DHSE(L'INHOUSE),INHOUSE house number
MVC DSTRT,INSTREET street name
SPACE
*****************************************************************
\* TO MAKE A FUNCTION 1 CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO 1 *
\* (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
\* (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER *
\* FIELD *
\* (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
\* (6) CALL GBI WITH 2 WORKAREAS *
\* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*****************************************************************
\* Clear WA1 to blanks
LA R8,P1BAL "To" address for MVCL
LA R9,P1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
\* and do nothing else (the "from" address register is not used).
MVCL R8,R10
SPACE
\* Prime Work Area 1 for Function 1 call
MVI P1IPLIND,C'C' Set Work Area Format to COW
MVC P1IFUNC,=CL2'1 ' Get function code
MVC P1IBORO1,INBORO borough code
*
\* Note COW - MSW: Display House # - P1IHSE# is a 16-byte field
\* W1IHSE# is a 12-byte field
*
MVC P1IHSE#(L'INHOUSE),INHOUSE house number
MVC P1ISTRT1,INSTREET street name
*
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\* *
\* As of Geosupport Version 10.1, *
\* to receive roadbed-specific information, *
\* set the Roadbed Request Switch to 'R', as follows: *
\* MVC P1IRBRQS,C'R' *
\* *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
MVC P1ISNL(L'P1ISNL),=C'25' Normalized street name length
\* Call Function 1 (2-Work-Area call)
CALL GBI,(P1BAL,P2BAL),VL
\* Check Return code
CLC P1ORC(2),=C'00' Good return?
BE PROCESS Yes, process returned data
\* Handle errors and warnings
ERREXIT DS 0H
CLC P1ORC(2),=C'01' Warning condition?
BE PUTWARN Yes, process warning
\* and then process input;
\* otherwise, process error
MVC ERINPUT,DSPLYIN Boro code, hse no., street name
MVC ERFUNC,P1IFUNC function code
MVC ERRET(L'P1ORC),P1ORC return code
MVC ERREAS(L'P1OREASN),P1OREASN reason code
PUT OUTFILE,ERR1 Print error messages 1
B PUTMSG and 2
PUTWARN DS 0H
MVC WRINPUT,DSPLYIN Boro code, hse no., street name
MVC WRFUNC,P1IFUNC function code
MVC WRRET(L'P1ORC),P1ORC return code
MVC WRREAS(L'P1OREASN),P1OREASN reason code
PUT OUTFILE,WRN1 Print warning messages 1
PUTMSG DS 0H and 2
MVC ERRWRN(L'P1OERROR),P1OERROR
PUT OUTFILE,ERRWRN2 Print error/warning message 2
CLC P1ORC(2),=C'01' Warning condition?
BNE NEXTREC No, get next record, if any
MVI OINPUT,C' ' Yes,
MVC OINPUT+1(L'OINPUT-1),OINPUT ensure input NOT displayd
MVI OUTVALID,C' ' ensure single-spacing after warning
B GETZIP and continue normal processing
SPACE
\* Handle successful Geosupport calls (Return Code <= 01)
PROCESS DS 0H
MVC OINPUT,DSPLYIN Boro code, hse no., street name
MVI OUTVALID,C'0' Ensure double-spacing
GETZIP DS 0H
MVC OZIP,P2F1ZIP ZIP code
MVC OCOMM,P2F1CDN community district number
MVC OPCT,P2F1POP police precinct
MVC OSCHL,P2F1SCH school district
***** At this point, clear WA1 again, call Function D, and move ******
***** its reported Low and High Intersecting Street Names to output *
TITLE 'GET LOW, HIGH INTERSECTING STREETS, USING FUNCTION D'
SPACE 2
*************************************************************
\* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND *
\* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE *
\* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS *
\* FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO D *
\* (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED *
\* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE *
\* HAS SPACE FOR ONLY 25 CHARACTERS) *
\* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
\* STREET NAMES FORMATTED FOR DISPLAY *
\* (5) MOVE WA2'S LOW B5SC FIELD TO WA1'S INPUT STREET *
\* CODE 1 FIELD *
\* (6) MOVE WA2'S HIGH B5SC FIELD TO WA1'S INPUT STREET *
\* CODE 2 FIELD *
\* (7) CALL GBI WITH 1 WORKAREA *
\* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*************************************************************
SPACE
\* Clear WA1 to blanks
LA R8,P1BAL "To" address for MVCL
LA R9,P1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
and do nothing else (the "from" address register is not used).
MVCL R8,R10
MVI P1IPLIND,C'C' Set Work Area Format to COW
*
\* Note COW - MSW: P1ICDEx is the 10-digit street code (no boro)
\* P1IBCDx is the Boro and 10-digit street code
\* W1ICDEx is the packed Boro and 5-digit street code
\* P2F1CDEx is Boro and 5-digit street code list
\* W2F1CDEx is packed Boro and 5-digit street code list
*
MVC P1IBCD1(6),P2F1CDEL
MVC P1IBCD2(6),P2F1CDEH
MVC P1IFUNC(2),=CL2'D '
MVC P1ISNL(L'P1ISNL),=C'25' normalized street name length
MVI P1ICMPCT,C'C' streets to be compacted
CALL GBI,P1BAL,VL Call Function D
\* Check Return code
CLC P1ORC(2),=C'00' Good return?
BNE ERREXIT No, error or warning
\* Yes, complete the record
\* and write it out
PUTREC DS 0H
MVC OLOSTRT,P1OSTRT1
MVC OHISTRT,P1OSTRT2
\* Print an output record and get the next input record, if any
PUT OUTFILE,OUTVALID
B NEXTREC
EXIT DS 0H
OUTOPNER DS 0H
CLOSE (INFILE)
TM OUTFILE+48,X'10' Did OUTFILE open successfully?
BNO INOPNERR No, bypass closing it
CLOSE (OUTFILE)
INOPNERR DS 0H
L R13,4(,R13)
L R14,12(,R13)
LM R0,R12,20(R13)
BR R14
SPACE 2
PARAMERR DS 0H parameter error, missing or invalid
LA R15,8 rc=8
B EXIT
TITLE 'DATA SECTION - REGISTER ASSIGNMENTS'
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
TITLE 'FILE AND RECORD DEFINITIONS'
PUSH PRINT
PRINT NOGEN
INFILE DCB DSORG=PS,MACRF=(GM),DDNAME=INFILE, *
RECFM=FB,LRECL=80,BLKSIZE=400,EODAD=EXIT
SPACE
OUTFILE DCB DSORG=PS,MACRF=(PM),DDNAME=SYSPRINT, *
RECFM=FBA,LRECL=133,BLKSIZE=1330
*
POP PRINT
SPACE
INREC DS 0CL80 Input record
INBORO DS CL1 Borough code
INHOUSE DS CL12 House number
INSTREET DS CL32 Street name
DC 35C' ' filler
SPACE
\* Output records: error, warning, and normal
ERR1 DS 0CL133
DC C'0'
ERINPUT DS CL48
DC C'*** FUNCTION '
ERFUNC DS CL2
DC C' GRC = '
ERRET DS CL2
DC C' REASON CODE = '
ERREAS DS CL1
DC CL(133-89)' '
SPACE
WRN1 DS 0CL133
DC C'0'
WRINPUT DS CL48
DC C'*** FUNCTION '
WRFUNC DS CL2
DC C' WARNING, GRC = '
WRRET DS CL2
DC C' REASON CODE = '
WRREAS DS CL1
DC CL(133-98)' '
SPACE
ERRWRN2 DS 0CL133
DC C' '
DC 48C' ' Boro Code, House Number, Street Name
DC CL4'*** '
ERRWRN DS CL80 Error/Warning message
SPACE
HDR1 DC CL133'1SAMPLE ASSEMBLER \#1 EXECUTION OUTPUT *
'
HDR2 DC CL133'0*****---------- INPUT ADDRESS ------------***** \*C
****--------------------- SELECTED OUTPUT ITEMS --------C
----------------------*****'
HDR3 DC CL133'0B HOUSE NUMBER IN-STREET-NAME *
ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET HIGH *
CROSS STREET '
HDR4 DC CL133' - ------------ -------------------------------- -*
---- -- -------- ------- ------------------------- -----*
---------------------------'
OUTVALID DS 0CL133
\* Borough code, house number, and street name are from input record
DC C'0'
OINPUT DS CL48
OZIP DS CL5
DC C' '
OCOMM DS CL2
DC C' '
OPCT DS CL3
DC 6C' '
OSCHL DS CL2
DC 6C' '
OLOSTRT DS CL25 Normalized name of intersecting street at low end
DC C' '
OHISTRT DS CL25 Normalized name of intersecting street at high end
DC 7C' '
TITLE 'WORKING VARIABLES, VALUES, ETC.'
MYSAVE DC 18F'0'
***********************************************************************
***** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
***** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
***********************************************************************
COPY P1BAL COPY WORK AREA 1
EJECT
COPY P2BAL COPY WORK AREA 2
EJECT
SPACE 2
DSPLYIN DS 0CL48
DBORO DS CL1
DC C' '
DHSE DS CL12
DC C' '
DSTRT DS CL32
DC C' '
SPACE 2
TITLE 'CONSTANTS AND LITERAL POOL'
SPACE 2
LTORG
END ASMC1SRC
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
/*
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* GEO.SUPPORT.PDSE.LOADLIB AND GEO.SUPPORT.LOADLIB \*//
//* ARE REQUIRED IN THE STEPLIB (OR JOBLIB) OF THE \*//
//* GEOSUPPORT EXECUTION STEP. \*//
//* \*//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
//* DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS ARE NO LONGER USED TO DEFINE? \*//
//* GEOSUPPORT DATA FILES. \*//
//* DD STATEMENTS ARE NO LONGER INCLUDED FOR THE \*//
//* GEOSUPPORT FOREGROUND FILES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER \*//
//* \*//
//SYSUDUMP DD SYSOUT=\*,OUTLIM=2000
//SYSPRINT DD SYSOUT=*
//INFILE DD *
122 READE ST
1500 DUANE ST
12-4 BROADWAY
4165-100 BAISLEY BLVD
4165-1000 BAISLEY BLVD
/*
//
*****---------- INPUT ADDRESS ------------***** *****--------------------- SELECTED OUTPUT ITEMS ----------------*****
B HOUSE NUMBER IN-STREET-NAME ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET HIGH CROSS STREET
- ------------ -------------------------------- ----- -- -------- ------- ------------------------- ------------------
1 22 READE ST 10007 01 005 02 ELK STREET BROADWAY
1 500 DUANE ST *** FUNCTION 1 GRC = 42 REASON CODE =
*** ADDRESS NUMBER OUT OF RANGE
1 2-4 BROADWAY *** FUNCTION 1 WARNING, GRC = 01 REASON CODE = 1
*** ADDR NUMBER ALTERED: RANGE ASSUMED. USING DIGITS BEFORE DASH ONLY
10004 01 001 02 STONE STREET BOWLING GREEN
4 165-100 BAISLEY BLVD 11434 12 113 28 GUY R BREWER BOULEVARD BEDELL STREET
4 165-1000 BAISLEY BLVD *** FUNCTION 1 GRC = 13 REASON CODE = 2
*** ADDRESS NBR 165-1000 HAS MORE THAN 3 DIGITS AFTER THE DASH.
ASSEMBLER SAMPLE PROGRAM #1
//ASMF2SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//** ASSEMBLER SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#2 **
//** MSW FORMAT **
//********************************************************************
//STEP1 EXEC ASMACLG,
// PARM.ASM='OBJECT,NODECK',
// PARM.LKED='XREF,LET,LIST,NCAL'
//ASM.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
//ASM.SYSIN DD *
ASMF2SRC TITLE 'SAMPLE GEOSUPPORT ASSEMBLER PROGRAM 2 - MSW FORMAT'
ASMF2SRC CSECT
******************************************************************
\* THIS PROGRAM MAKES FUNCTION 2 AND D CALLS TO GEOSUPPORT USING *
\* TWO BOROS AND TWO STREET NAMES SUPPLIED BY AN INSTREAM FILE. *
\* FUNCTION 2 RETURNS GEOGRAPHIC INFORMATION FOR AN INTERSECTION. *
\* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
\* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
\* ORIGINAL CALL TO FUNCTION 2, ALL THE CROSS STREET NAMES *
\* WOULD HAVE BEEN RETURNED BY FUNCTION 2. *
******************************************************************
*
***********************************************************************
\* *
\* This program will do the following: *
\* * Read an instream record containing 2 borough codes *
\* and two street names *
\* *
\* * Build Work Area 1 for a Function 2 call *
\* *
\* * Call Function 2 *
\* *
\* * Get ZIP code, community district, police precinct, school *
\* district, and lists of intersecting street codes. *
\* These will be displayed along with the input intersection *
\* which consists of 2 borough codes, and 2 street names. *
\* *
\* * Call Function D to get the street names of all intersecting *
\* streets. *
\* *
\* If it is greater than 01, an error message is printed, and *
\* the next input record, if any, is read. *
\* If it is 01, a warning message is printed, the input record is *
\* processed, and the next record is read. *
\* If it is zero, the input record is processed, and the next *
\* record is read. *
\* *
***********************************************************************
SPACE
STM R14,R12,12(R13) Save caller's registers
LR R3,R15
LA R12,4095(,R3) (second base register
LA R12,1(,R12) to accommodate Work Areas 1 and 2)
USING ASMF2SRC,R3,R12
\* Chain save areas
LA R4,MYSAVE
ST R13,4(,R4) Save caller's savearea address
ST R4,8(,R13) Save pgm's savearea adr in caller savearea
LR R13,R4 Ensure that R13 points to pgm's savearea
SPACE 2
XR R15,R15 (set OS return code to zero)
\* Open input and output files
OPEN (INFILE,,OUTFILE,(OUTPUT))
TM INFILE+48,X'10' Did input file open successfully?
BNO INOPNERR (no..)
TM OUTFILE+48,X'10' Did output file open successfully?
BNO OUTOPNER (no..)
\* Print report header lines
SPACE
PUT OUTFILE,HDR1
PUT OUTFILE,HDR2
PUT OUTFILE,HDR3
PUT OUTFILE,HDR4
B NEXTREC
SPACE 2
TITLE 'READ IN-STREAM INPUT AND PREPARE FUNCTION 2 CALL'
\* Read (next) input record
NEXTREC DS 0H
GET INFILE,INREC
\* Move input data to output record for display
MVC DBORO1,INBORO1 First borough code
MVC DSTRT1,INSTRT1 First street name
MVC DBORO2,INBORO2 Second borough code
MVC DSTRT2,INSTRT2 Second street name
SPACE
******************************************************************
\* TO MAKE A FUNCTION 2 CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET WA1'S FUNCTION CODE FIELD TO 2 *
\* (3) MOVE THE 1ST INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
\* (4) MOVE THE 1ST INPUT STREET TO WA1'S INPUT STREET NAME *
\* (5) MOVE THE 2ND INPUT BORO TO WA1'S INPUT BORO CODE 2 FIELD *
\* (6) MOVE THE 2ND INPUT STREET TO WA1'S INPUT STREET NAME 2 *
\* (7) CALL GBI WITH 2 WORKAREAS *
\* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
******************************************************************
\* Clear WA1 to blanks
LA R8,W1BAL "To" address for MVCL
LA R9,W1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
\* and do nothing else (the "from" address register is not used).
MVCL R8,R10
SPACE
\* Prime Work Area 1 for Function 2 call
MVC W1IFUNC,=CL2'2 ' Get function code
MVC W1IBORO1,INBORO1 borough code 1
MVC W1ISTRT1,INSTRT1 street name 1
MVC W1IBORO2,INBORO2 borough code 2
MVC W1ISTRT2,INSTRT2 street name 2
MVC W1ISNL(L'W1ISNL),=C'25' Normalized street name length
\* Call Function 2 (2-Work-Area call)
CALL GBI,(W1BAL,W2BAL),VL
\* Check Return code
CLC W1ORC(2),=C'00' Good return?
BE PROCESS Yes, process returned data
\* Handle errors and warnings
ERREXIT DS 0H
CLC W1ORC(2),=C'01' Warning condition?
BE PUTWARN Yes, process warning
\* and then process input;
\* otherwise, process error
MVC ERFUNC,W1IFUNC function code
MVC ERRET(L'W1ORC),W1ORC return code
MVC ERREAS(L'W1OREASN),W1OREASN reason code
MVC ERRMSG(L'W1OERROR),W1OERROR Geosupport error message
PUT OUTFILE,ERR1 Print error message 1
MVC ERINPUT,DSPLYIN 2 boro codes and 2 street names
PUT OUTFILE,ERR2 Print error message 2
B NEXTREC
PUTWARN DS 0H
MVC WRFUNC,W1IFUNC function code
MVC WRRET(L'W1ORC),W1ORC return code
MVC WRREAS(L'W1OREASN),W1OREASN reason code
MVC WRNMSG(L'W1OERROR),W1OERROR Geosupport warning message
PUT OUTFILE,WARN Print warning message
SPACE
\* Handle successful Geosupport calls (Return Code <= 01)
PROCESS DS 0H
MVI OUTFIXED,C'0' Init. carriage control to dbl-space
CLC W1ORC(2),=C'01' Was a warning issued?
BNE MOVEOUT No..
MVI OUTFIXED,C' ' Yes, single-space output instead
MOVEOUT DS 0H
MVC OINPUT,DSPLYIN Pair of boro codes and street names
MVC OZIP,W2F2ZIP ZIP code
MVC OCOMM,W2F2CDN community district number
MVC OPCT,W2F2POP police precinct
MVC OSCHL,W2F2SCH school district
***** At this point, clear WA1 again, call Function D, and move ******
***** all reported Intersecting Street Names to output ******
TITLE 'GET INTERSECTING STREET NAMES, USING FUNCTION D'
SPACE 2
*************************************************************
\* TO GET THE STREET NAMES FOR INTERSECTING STREET CODES *
\* MAKE A FUNCTION D CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* (2) SET THE WA1'S FUNCTION CODE FIELD TO D *
\* (3) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
\* STREET NAMES FORMATTED FOR DISPLAY *
\* (4) MOVE THE PACKED BORO AND STREET CODE TO *
\* WA1'S INPUT STREET CODE 1 FIELD *
\* (5) CALL GBI WITH 1 WORKAREA *
\* (6) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*************************************************************
SPACE
\* For each street code of intersecting streets, including those input,
\* call Function D to get the corresponding street name
XR R4,R4
MVC INTWK,W2F2#INT get count of intersecting streets.
NI INTWK,X'0F' remove zone, leaving numeric
IC R4,INTWK count of intersecting streets.
LA R5,W2F2CODE point to street code(s).
SPACE
INTRLOOP DS 0H
\* Clear WA1 to blanks
LA R8,W1BAL "To" address for MVCL
LA R9,W1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
\* and do nothing else (the "from" address register is not used).
MVCL R8,R10
SPACE
MVC W1IFUNC(2),=CL2'D '
MVC W1ISNL(L'W1ISNL),=C'25' normalized street name length
MVI W1ICMPCT,C'C' streets to be compacted
MVC W1ICDE1(L'W1ICDE1),0(R5) Intersecting street code
CALL GBI,W1BAL,VL Call Function D
\* Check Return code
CLC W1ORC(2),=C'00' Good return?
BNE ERREXIT No, error or warning
\* Yes, complete the record
\* and write it out
PFIX NOP PVAR
OI PFIX+1,X'F0'
MVC OINTRSC1,W1OSTRT1
\* put out the initial output including the first intersecting street
PUT OUTFILE,OUTFIXED
B NEXTSC Now get the rest of the street codes, if any
PVAR DS 0H
MVC OINTRSCN,W1OSTRT1
\* Print an output record and get the next intersecting street, if any
PUT OUTFILE,OUTVAR
NEXTSC DS 0H
LA R5,4(,R5) point to next intersecting street code
BCT R4,INTRLOOP if any, and process it;
NI PFIX+1,X'0F' reset 1st-time (fixed/variable) switch
B NEXTREC then, process next input record, if any
SPACE
EXIT DS 0H
OUTOPNER DS 0H
CLOSE (INFILE)
TM OUTFILE+48,X'10' Did OUTFILE open successfully?
BNO INOPNERR No, bypass closing it
CLOSE (OUTFILE)
INOPNERR DS 0H
L R13,4(,R13)
L R14,12(,R13)
LM R0,R12,20(R13)
BR R14
SPACE 2
PARAMERR DS 0H parameter error, missing or invalid
LA R15,8 rc=8
B EXIT
TITLE 'DATA SECTION - REGISTER ASSIGNMENTS'
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
TITLE 'FILE AND RECORD DEFINITIONS'
PUSH PRINT
PRINT NOGEN
INFILE DCB DSORG=PS,MACRF=(GM),DDNAME=INFILE, *
RECFM=FB,LRECL=80,BLKSIZE=400,EODAD=EXIT
SPACE
OUTFILE DCB DSORG=PS,MACRF=(PM),DDNAME=SYSPRINT, *
RECFM=FBA,LRECL=133,BLKSIZE=1330
*
POP PRINT
SPACE
INREC DS 0CL80 Input record
INBORO1 DS CL1 First borough code
INSTRT1 DS CL32 First street name
INBORO2 DS CL1 Second borough code
INSTRT2 DS CL32 Second street name
DC 14C' ' filler
SPACE
\* Output records: header, normal, warning, and error
SPACE
\* header records
HDR1 DC CL133'1SAMPLE ASSEMBLER \#2 EXECUTION OUTPUT *
*
'
HDR2 DC CL133'0*****----------------- INPUT INTERSECTION -------C
--------------***** *****--------------- SELECTED OUTPUT*
ITEMS ---------------*****'
HDR3 DC CL133'0B IN-STREET-NAME-1 B IN-STREET-NA*
ME-2 ZIP CD NYPD-PCT SCHLDST INTERSECTI*
NG STREET NAMES '
HDR4 DC CL133' - -------------------------------- - ------------*
------------------- ----- -- -------- ------- ----------*
---------------------------'
SPACE
\* normal records, i.e., output for valid data
OUTFIXED DS 0CL133 Fixed output
\* Borough codes and street names for each of 2 streets are from input
DC C'0'
OINPUT DS CL69
OZIP DS CL5
DC C' '
OCOMM DS CL2
DC C' '
OPCT DS CL3
DC 6C' '
OSCHL DS CL2
DC 6C' '
OINTRSC1 DS CL25 Normalized name of first intersecting street
SPACE
OUTVAR DS 0CL133 Output line repeated per No. of Intersecting Sts.
DC C' '
DC 95C' '
OINTRSCN DS CL25 Normalized name of additional intersecting street
DC (133-121)C' '
SPACE
\* warning record
WARN DS 0CL133
DC C'0'
DC C'**** FUNCTION '
WRFUNC DS CL2
DC C' WARNING, GRC = '
WRRET DS CL2
DC C' REASON CODE = '
WRREAS DS CL1
DC C'. '
WRNMSG DS CL80 Warning message
SPACE
\* error records
ERR1 DS 0CL133
DC C'0'
DC C'***** FUNCTION '
ERFUNC DS CL2
DC C' GRC = '
ERRET DS CL2
DC C' REASON = '
ERREAS DS CL1
DC C'. '
ERRMSG DS CL80 Error message
DC CL(133-120)' '
SPACE
ERR2 DS 0CL133
DC C' '
ERINPUT DS CL69
DC CL(133-70)' '
TITLE 'WORKING VARIABLES, VALUES, ETC.'
#INTER DS D Working field for no. of intersecting streets
MYSAVE DC 18F'0'
***********************************************************************
***** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
***** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
***********************************************************************
COPY W1BAL COPY WORK AREA 1
EJECT
COPY W2BAL COPY WORK AREA 2
EJECT
SPACE 2
DSPLYIN DS 0CL69
DBORO1 DS CL1
DC C' '
DSTRT1 DS CL32
DC C' '
DBORO2 DS CL1
DC C' '
DSTRT2 DS CL32
SPACE 2
INTWK DS XL1 work field for number of intersecting streets
TITLE 'CONSTANTS AND LITERAL POOL'
SPACE 2
LTORG
END ASMF2SRC
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
/*
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, \*//
//* ETC) ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT \*//
//* IS TAILORED TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//*
//SYSUDUMP DD SYSOUT=\*,OUTLIM=2000
//SYSPRINT DD SYSOUT=*
//INFILE DD *
1CHAMBERS ST 1HUDSON ST
1SIXTH AVE 1W. 8 ST
1DUANE ST 1READE ST
/*
//
//ASMC2SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//** ASSEMBLER SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#2 **
//** COW FORMAT **
//********************************************************************
//STEP1 EXEC ASMACLG,
// PARM.ASM='OBJECT,NODECK',
// PARM.LKED='XREF,LET,LIST,NCAL'
//ASM.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
// DD DSN=SYS1.MACLIB,DISP=SHR
//ASM.SYSIN DD *
ASMC2SRC TITLE 'SAMPLE GEOSUPPORT ASSEMBLER PROGRAM 2 - COW FORMAT'
ASMC2SRC CSECT
******************************************************************
\* THIS PROGRAM MAKES FUNCTION 2 AND D CALLS TO GEOSUPPORT USING *
\* TWO BOROS AND TWO STREET NAMES SUPPLIED BY AN INSTREAM FILE. *
\* FUNCTION 2 RETURNS GEOGRAPHIC INFORMATION FOR AN INTERSECTION. *
\* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
\* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
\* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
\* ORIGINAL CALL TO FUNCTION 2, ALL THE CROSS STREET NAMES *
\* WOULD HAVE BEEN RETURNED BY FUNCTION 2. *
******************************************************************
*
***********************************************************************
\* *
\* This program will do the following: *
\* * Read an instream record containing 2 borough codes *
\* and two street names *
\* *
\* * Build Work Area 1 for a Function 2 call *
\* *
\* * Call Function 2 *
\* *
\* * Get ZIP code, community district, police precinct, school *
\* district, and lists of intersecting street codes. *
\* These will be displayed along with the input intersection *
\* which consists of 2 borough codes, and 2 street names. *
\* *
\* * Call Function D to get the street names of all intersecting *
\* streets. *
\* *
\* If it is greater than 01, an error message is printed, and *
\* the next input record, if any, is read. *
\* If it is 01, a warning message is printed, the input record is *
\* processed, and the next record is read. *
\* If it is zero, the input record is processed, and the next *
\* record is read. *
\* *
***********************************************************************
SPACE
STM R14,R12,12(R13) Save caller's registers
LR R3,R15
LA R12,4095(,R3) (second base register
LA R12,1(,R12) to accommodate Work Areas 1 and 2)
USING ASMC2SRC,R3,R12
\* Chain save areas
LA R4,MYSAVE
ST R13,4(,R4) Save caller's savearea address
ST R4,8(,R13) Save pgm's savearea adr in caller savearea
LR R13,R4 Ensure that R13 points to pgm's savearea
SPACE 2
XR R15,R15 (set OS return code to zero)
\* Open input and output files
OPEN (INFILE,,OUTFILE,(OUTPUT))
TM INFILE+48,X'10' Did input file open successfully?
BNO INOPNERR (no..)
TM OUTFILE+48,X'10' Did output file open successfully?
BNO OUTOPNER (no..)
\* Print report header lines
SPACE
PUT OUTFILE,HDR1
PUT OUTFILE,HDR2
PUT OUTFILE,HDR3
PUT OUTFILE,HDR4
B NEXTREC
SPACE 2
TITLE 'READ IN-STREAM INPUT AND PREPARE FUNCTION 2 CALL'
\* Read (next) input record
NEXTREC DS 0H
GET INFILE,INREC
\* Move input data to output record for display
MVC DBORO1,INBORO1 First borough code
MVC DSTRT1,INSTRT1 First street name
MVC DBORO2,INBORO2 Second borough code
MVC DSTRT2,INSTRT2 Second street name
SPACE
******************************************************************
\* TO MAKE A COW FORMAT FUNCTION 2 CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* AND SET WORK AREA FORMAT FLAG TO 'C' *
\* (2) SET WA1'S FUNCTION CODE FIELD TO 2 *
\* (3) MOVE THE 1ST INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
\* (4) MOVE THE 1ST INPUT STREET TO WA1'S INPUT STREET NAME *
\* (5) MOVE THE 2ND INPUT BORO TO WA1'S INPUT BORO CODE 2 FIELD *
\* (6) MOVE THE 2ND INPUT STREET TO WA1'S INPUT STREET NAME 2 *
\* (7) CALL GBI WITH 2 WORKAREAS *
\* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
******************************************************************
\* Clear WA1 to blanks
LA R8,P1BAL "To" address for MVCL
LA R9,P1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
\* and do nothing else (the "from" address register is not used).
MVCL R8,R10
*
MVI P1IPLIND,C'C' set work area format indicator to COW
*
SPACE
\* Prime Work Area 1 for Function 2 call
MVC P1IFUNC,=CL2'2 ' Get function code
MVC P1IBORO1,INBORO1 borough code 1
MVC P1ISTRT1,INSTRT1 street name 1
MVC P1IBORO2,INBORO2 borough code 2
MVC P1ISTRT2,INSTRT2 street name 2
MVC P1ISNL(L'P1ISNL),=C'25' Normalized street name length
\* Call Function 2 (2-Work-Area call)
CALL GBI,(P1BAL,P2BAL),VL
\* Check Return code
CLC P1ORC(2),=C'00' Good return?
BE PROCESS Yes, process returned data
\* Handle errors and warnings
ERREXIT DS 0H
CLC P1ORC(2),=C'01' Warning condition?
BE PUTWARN Yes, process warning
\* and then process input;
\* otherwise, process error
MVC ERFUNC,P1IFUNC function code
MVC ERRET(L'P1ORC),P1ORC return code
MVC ERREAS(L'P1OREASN),P1OREASN reason code
MVC ERRMSG(L'P1OERROR),P1OERROR Geosupport error message
PUT OUTFILE,ERR1 Print error message 1
MVC ERINPUT,DSPLYIN 2 boro codes and 2 street names
PUT OUTFILE,ERR2 Print error message 2
B NEXTREC
PUTWARN DS 0H
MVC WRFUNC,P1IFUNC function code
MVC WRRET(L'P1ORC),P1ORC return code
MVC WRREAS(L'P1OREASN),P1OREASN reason code
MVC WRNMSG(L'P1OERROR),P1OERROR Geosupport warning message
PUT OUTFILE,WARN Print warning message
SPACE
\* Handle successful Geosupport calls (Return Code <= 01)
PROCESS DS 0H
MVI OUTFIXED,C'0' Init. carriage control to dbl-space
CLC P1ORC(2),=C'01' Was a warning issued?
BNE MOVEOUT No..
MVI OUTFIXED,C' ' Yes, single-space output instead
MOVEOUT DS 0H
MVC OINPUT,DSPLYIN Pair of boro codes and street names
MVC OZIP,P2F2ZIP ZIP code
MVC OCOMM,P2F2CDN community district number
MVC OPCT,P2F2POP police precinct
MVC OSCHL,P2F2SCH school district
***** At this point, clear WA1 again, call Function D, and move ******
***** all reported Intersecting Street Names to output ******
TITLE 'GET INTERSECTING STREET NAMES, USING FUNCTION D'
SPACE 2
*************************************************************
\* TO GET THE STREET NAMES FOR INTERSECTING STREET CODES *
\* MAKE A FUNCTION D CALL: *
\* (1) INITIALIZE WORKAREA 1 TO SPACES *
\* AND SET WORK AREA FORMAT FLAG TO 'C' *
\* (2) SET THE WA1'S FUNCTION CODE FIELD TO D *
\* (3) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
\* STREET NAMES FORMATTED FOR DISPLAY *
\* (4) MOVE THE PACKED BORO AND STREET CODE TO *
\* WA1'S INPUT STREET CODE 1 FIELD *
\* (5) CALL GBI WITH 1 WORKAREA *
\* (6) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
*************************************************************
SPACE
\* For each street code of intersecting streets, including those input,
\* call Function D to get the corresponding street name
XR R4,R4
MVC INTWK,P2F2#INT get count of intersecting streets.
NI INTWK,X'0F' remove zone, leaving numeric
IC R4,INTWK count of intersecting streets.
LA R5,P2F2CODE point to street code(s).
SPACE
INTRLOOP DS 0H
\* Clear WA1 to blanks
LA R8,P1BAL "To" address for MVCL
LA R9,P1LENGTH "To" length
XR R11,R11 for blanking out std WA1,
ICM R11,B'1000',=C' ' rather than moving data
\* ...since if the "from" length reg. has lo-order zeroes, MVCL will
\* pad the target area with the pad character of the "from" register
\* and do nothing else (the "from" address register is not used).
MVCL R8,R10
*
MVI P1IPLIND,C'C' set work area format indicator to COW
*
SPACE
MVC P1IFUNC(2),=CL2'D '
MVC P1ISNL(L'P1ISNL),=C'25' normalized street name length
MVI P1ICMPCT,C'C' streets to be compacted
*
\* Note COW - MSW: P1ICDEx is the 10-digit street code (no boro)
\* P1IBCDx is the Boro and 10-digit street code
\* W1ICDEx is the packed Boro and 5-digit street code
\* P2F2CODE is Boro and 5-digit street code list
\* W2F2CODE is packed Boro and 5-digit street code list
*
MVC P1IBCD1(LB5SC),0(R5) Intersecting boro and street code
CALL GBI,P1BAL,VL Call Function D
\* Check Return code
CLC P1ORC(2),=C'00' Good return?
BNE ERREXIT No, error or warning
\* Yes, complete the record
\* and write it out
PFIX NOP PVAR
OI PFIX+1,X'F0'
MVC OINTRSC1,P1OSTRT1
\* put out the initial output including the first intersecting street
PUT OUTFILE,OUTFIXED
B NEXTSC Now get the rest of the street codes, if any
PVAR DS 0H
MVC OINTRSCN,P1OSTRT1
\* Print an output record and get the next intersecting street, if any
PUT OUTFILE,OUTVAR
NEXTSC DS 0H
LA R5,LB5SC(,R5) point to next intersecting street code
BCT R4,INTRLOOP if any, and process it;
NI PFIX+1,X'0F' reset 1st-time (fixed/variable) switch
B NEXTREC then, process next input record, if any
SPACE
EXIT DS 0H
OUTOPNER DS 0H
CLOSE (INFILE)
TM OUTFILE+48,X'10' Did OUTFILE open successfully?
BNO INOPNERR No, bypass closing it
CLOSE (OUTFILE)
INOPNERR DS 0H
L R13,4(,R13)
L R14,12(,R13)
LM R0,R12,20(R13)
BR R14
SPACE 2
PARAMERR DS 0H parameter error, missing or invalid
LA R15,8 rc=8
B EXIT
TITLE 'DATA SECTION - REGISTER ASSIGNMENTS'
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
TITLE 'FILE AND RECORD DEFINITIONS'
PUSH PRINT
PRINT NOGEN
INFILE DCB DSORG=PS,MACRF=(GM),DDNAME=INFILE, *
RECFM=FB,LRECL=80,BLKSIZE=400,EODAD=EXIT
SPACE
OUTFILE DCB DSORG=PS,MACRF=(PM),DDNAME=SYSPRINT, *
RECFM=FBA,LRECL=133,BLKSIZE=1330
*
POP PRINT
SPACE
INREC DS 0CL80 Input record
INBORO1 DS CL1 First borough code
INSTRT1 DS CL32 First street name
INBORO2 DS CL1 Second borough code
INSTRT2 DS CL32 Second street name
DC 14C' ' filler
SPACE
\* Output records: header, normal, warning, and error
SPACE
\* header records
HDR1 DC CL133'1SAMPLE ASSEMBLER \#2 EXECUTION OUTPUT *
*
'
HDR2 DC CL133'0*****----------------- INPUT INTERSECTION -------C
--------------***** *****--------------- SELECTED OUTPUT*
ITEMS ---------------*****'
HDR3 DC CL133'0B IN-STREET-NAME-1 B IN-STREET-NA*
ME-2 ZIP CD NYPD-PCT SCHLDST INTERSECTI*
NG STREET NAMES '
HDR4 DC CL133' - -------------------------------- - ------------*
------------------- ----- -- -------- ------- ----------*
---------------------------'
SPACE
\* normal records, i.e., output for valid data
OUTFIXED DS 0CL133 Fixed output
\* Borough codes and street names for each of 2 streets are from input
DC C'0'
OINPUT DS CL69
OZIP DS CL5
DC C' '
OCOMM DS CL2
DC C' '
OPCT DS CL3
DC 6C' '
OSCHL DS CL2
DC 6C' '
OINTRSC1 DS CL25 Normalized name of first intersecting street
SPACE
OUTVAR DS 0CL133 Output line repeated per No. of Intersecting Sts.
DC C' '
DC 95C' '
OINTRSCN DS CL25 Normalized name of additional intersecting street
DC (133-121)C' '
SPACE
\* warning record
WARN DS 0CL133
DC C'0'
DC C'**** FUNCTION '
WRFUNC DS CL2
DC C' WARNING, GRC = '
WRRET DS CL2
DC C' REASON CODE = '
WRREAS DS CL1
DC C'. '
WRNMSG DS CL80 Warning message
SPACE
\* error records
ERR1 DS 0CL133
DC C'0'
DC C'***** FUNCTION '
ERFUNC DS CL2
DC C' GRC = '
ERRET DS CL2
DC C' REASON = '
ERREAS DS CL1
DC C'. '
ERRMSG DS CL80 Error message
DC CL(133-120)' '
SPACE
ERR2 DS 0CL133
DC C' '
ERINPUT DS CL69
DC CL(133-70)' '
TITLE 'WORKING VARIABLES, VALUES, ETC.'
#INTER DS D Working field for no. of intersecting streets
MYSAVE DC 18F'0'
***********************************************************************
***** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE ***
***** COPY STATEMENTS) IS STRONGLY ENCOURAGED. ***
***********************************************************************
COPY P1BAL COPY WORK AREA 1
EJECT
COPY P2BAL COPY WORK AREA 2
EJECT
SPACE 2
DSPLYIN DS 0CL69
DBORO1 DS CL1
DC C' '
DSTRT1 DS CL32
DC C' '
DBORO2 DS CL1
DC C' '
DSTRT2 DS CL32
SPACE 2
INTWK DS XL1 work field for number of intersecting streets
LB5SC EQU 6 length of Boro and 5-digit street code
TITLE 'CONSTANTS AND LITERAL POOL'
SPACE 2
LTORG
END ASMC2SRC
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
/*
//LKED.INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, \*//
//* ETC) ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT \*//
//* IS TAILORED TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//*
//SYSUDUMP DD SYSOUT=\*,OUTLIM=2000
//SYSPRINT DD SYSOUT=*
//INFILE DD *
1CHAMBERS ST 1HUDSON ST
1SIXTH AVE 1W. 8 ST
1DUANE ST 1READE ST
/*
//
*****----------------- INPUT INTERSECTION ---------------------***** *****--------------- SELECTED OUTPUT ITEMS ---------------*****
B IN-STREET-NAME-1 B IN-STREET-NAME-2 ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET NAMES
\- -------------------------------- - ------------------------------- ----- -- -------- ------- -------------------------------------
1 CHAMBERS ST 1 HUDSON ST 10007 01 001 02 CHAMBERS STREET
HUDSON STREET
WEST BROADWAY
1 SIXTH AVE 1 W. 8 ST 10014 02 006 02 6 AVENUE
GREENWICH AVENUE
WEST 8 STREET
***** FUNCTION 2 GRC = 62 REASON = . READE STREET & DUANE STREET DO NOT INTERSECT
1 DUANE ST 1 READE ST
PL/1 SAMPLE PROGRAM #1
//PL1F1BAT JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** PL1 SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1. ******
//*** (MSW FORMAT) ******
//********************************************************************
//STEP1 EXEC IBMZCPLG,REGION=0M,GOPGM='PL1F1SC',
// PARM.PLI='S,GS,INCLUDE',
// PARM.LKED='AMODE(31)'
//PLI.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
//SYSIN DD *
PL1F1SC: PROC OPTIONS(MAIN);
/*****************************************************************/
/* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING \*/
/* BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE.\*/
/* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. \*/
/* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. \*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE \*/
/* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET \*/
/* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 1. \*/
/*****************************************************************/
DCL EOF BIT(1) INIT('0'B),
YES BIT(1) INIT('1'B),
NO BIT(1) INIT('0'B),
ADDR BUILTIN,
(I,J) FIXED BIN(15) INIT(0);
/*******************************************************************/
/************** GBI DECLARATION BELOW IS REQUIRED **************/
/*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE *****/
/*** %INCLUDE STATEMENTS) IS STRONGLY ENCOURAGED. *******/
/*******************************************************************/
DCL GBI ENTRY OPTIONS(ASM,INTER);
%INCLUDE W1PL1;
%INCLUDE W2PL1;
/***** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DECLARATION *****/
DCL INFILE FILE STREAM INPUT;
DCL IN_BORO CHAR(01),
IN_HOUSENUM CHAR(12),
IN_STREET_NAME CHAR(32);
/******** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *********/
DCL SYSPRINT FILE STREAM OUTPUT PRINT;
ON ENDPAGE(SYSPRINT)
PUT EDIT('SAMPLE PL1 PROGRAM \#1 EXECUTION OUTPUT',
'*****---------- INPUT ADDRESS ------------***** '||
'*****---------------------'||
' SELECTED OUTPUT ITEMS -----------------------*****',
'B HOUSE NUMBER IN-STREET-NAME '||
' ZIP CD NYPD-PCT SCHLDST '||
'LOW CROSS STREET HIGH CROSS STREET ',
'_ ____________ '||(32)'_'||' '||
'_____ __ ________ _______ '||
(25)'_'||' '||(25)'_')
(PAGE,COL(1),A,SKIP(2),COL(1),A,COL(1),A,SKIP(0),COL(1),A);
OPEN FILE(SYSPRINT) LINESIZE(133);
SIGNAL ENDPAGE(SYSPRINT);
/*****************************************************************/
ON ENDFILE(INFILE) BEGIN; EOF=YES; GOTO ENDLOOP; END;
OPEN FILE(INFILE);
DO WHILE (EOF = NO);
/********** REPLACE CODE BELOW WITH YOUR OWN INPUT *************/
GET FILE(INFILE) EDIT(IN_BORO,IN_HOUSENUM,IN_STREET_NAME)
(COL(1),A(1),X(1),A(12),X(1),A(32));
/*****************************************************************/
/* TO MAKE A FUNCTION 1 CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION CODE FIELD TO 1 \*/
/* (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD \*/
/* (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER \*/
/* FIELD \*/
/* (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD \*/
/* (6) CALL GBI WITH 2 WORKAREAS \*/
/* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/*****************************************************************/
WORK1PL1 = ' ';
GEO_WA1_IN_FUNCTION_1 = '1';
GEO_WA1_IN_BORO = IN_BORO;
GEO_WA1_IN_HOUSENUM = IN_HOUSENUM;
GEO_WA1_IN_STREET_1 = IN_STREET_NAME;
CALL GBI(W1PL1,W2PL1);
IF GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 ¬= '00' &
GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 ¬= '01'
THEN DO;
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
PUT EDIT(IN_BORO,IN_HOUSENUM,IN_STREET_NAME,
'*** FUNCTION 1 GRC =',
GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2,
'REASON CODE =',GEO_WA1_OUT_REASON_CODE,
'*** ',GEO_WA1_OUT_ERROR_MESSAGE)
(SKIP(2),COL(1),(7)(A,X(1)),SKIP(1),COL(49),A,A);
END;
ELSE DO;
PUT EDIT(IN_BORO,IN_HOUSENUM,IN_STREET_NAME)
(SKIP(2),COL(1),(3)(A,X(1)));
IF GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 = '01'
THEN DO;
/** INSERT YOUR OWN WARNING HANDLING ROUTINE HERE \**/
PUT EDIT('*** FUNCTION 1 WARNING, GRC =',
GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2,
'REASON CODE =',GEO_WA1_OUT_REASON_CODE,
'*** ',GEO_WA1_OUT_ERROR_MESSAGE)
(COL(49),(4)(A,X(1)),SKIP(1),COL(49),A,A);
END;
/****************************************************/
/***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ****/
/***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS ****/
/****************************************************/
PUT EDIT(GEO_WA2_FN1_ZIP,GEO_WA2_FN1_COMDIST_NUMBER,
GEO_WA2_FN1_POL_PRECINCT,GEO_WA2_FN1_SCHOOLDIST)
(COL(49),(3)(A,X(1)),X(5),A);
/***********************************************************/
/* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND \*/
/* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE \*/
/* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS \*/
/* FROM THE HIGH AND LOW STREET CODE LISTS CALL \*/
/* FUNCTION D: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION CODE FIELD TO D \*/
/* (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED \*/
/* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE \*/
/* HAS SPACE FOR ONLY 25 CHARACTERS) \*/
/* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN \*/
/* STREET NAMES FORMATTED FOR DISPLAY \*/
/* (5) MOVE WA2'S LOW PBSC FIELD TO WA1'S INPUT STREET \*/
/* CODE 1 FIELD \*/
/* (6) MOVE WA2'S HIGH PBSC FIELD TO WA1'S INPUT STREET \*/
/* CODE 2 FIELD \*/
/* (7) CALL GBI WITH 1 WORKAREA \*/
/* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/***********************************************************/
WORK1PL1 = ' ';
GEO_WA1_IN_FUNCTION_1 = 'D';
GEO_WA1_IN_SNL = '25';
GEO_WA1_IN_COMPACT_NAME_FLAG = 'C';
GEO_WA1_IN_STREETCODE_1 = GEO_WA2_FN1_LOW_PBSC(1);
GEO_WA1_IN_STREETCODE_2 = GEO_WA2_FN1_HI_PBSC(1);
CALL GBI(W1PL1);
IF GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 = '00'
THEN DO;
/******** INSERT YOUR OWN CODE HERE *******/
PUT EDIT(GEO_WA1_OUT_STREET_1,GEO_WA1_OUT_STREET_2)
(COL(75),A(25),X(1),A(25));
END;
ELSE DO;
/*** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE \***/
PUT EDIT(IN_BORO,IN_HOUSENUM,IN_STREET_NAME,
'*** FUNCTION D GRC =',
GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2,
'REASON CODE =',GEO_WA1_OUT_REASON_CODE,',',
'*** ',GEO_WA1_OUT_ERROR_MESSAGE)
(SKIP(2),COL(1),(8)(A,X(1)),
SKIP(1),COL(49),A,A);
END;
END;
ENDLOOP: END;
CLOSE FILE(INFILE);
END PL1F1SC;
/*
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
/*
//INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//GO.SYSLMOD DD DSN=&&GOSET,DISP=(OLD,DELETE)
//*
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, \*//
//* ETC) ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT \*//
//* IS TAILORD TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//*
//GO.SYSPRINT DD SYSOUT=A
//GO.INFILE DD *
1 22 READE ST
1 500 DUANE ST
1 2-4 BROADWAY
4 165-100 BAISLEY BLVD
4 165-1000 BAISLEY BLVD
/*
//
//PL1C1SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** PL1 SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1. ******
//*** (COW FORMAT) ******
//********************************************************************
//STEP1 EXEC IBMZCPLG,REGION=0M,GOPGM='PL1C1SC',
// PARM.PLI='S,GS,INCLUDE',
// PARM.LKED='AMODE(31),LIST'
//PLI.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
//SYSIN DD *
PL1C1SC: PROC OPTIONS(MAIN);
/*****************************************************************/
/* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING \*/
/* BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE.\*/
/* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. \*/
/* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. \*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE \*/
/* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET \*/
/* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 1. \*/
/*****************************************************************/
DCL EOF BIT(1) INIT('0'B),
YES BIT(1) INIT('1'B),
NO BIT(1) INIT('0'B),
ADDR BUILTIN,
(I,J) FIXED BIN(15) INIT(0);
/*******************************************************************/
/************** GBI DECLARATION BELOW IS REQUIRED **************/
/*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE *****/
/*** %INCLUDE STATEMENTS) IS STRONGLY ENCOURAGED. *******/
/*******************************************************************/
DCL GBI ENTRY OPTIONS(ASM,INTER);
%INCLUDE P1PL1;
%INCLUDE P2PL1;
/***** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DECLARATION *****/
DCL INFILE FILE STREAM INPUT;
DCL IN_BORO CHAR(01),
IN_HOUSENUM CHAR(12),
IN_STREET_NAME CHAR(32);
/******** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *********/
DCL SYSPRINT FILE STREAM OUTPUT PRINT;
ON ENDPAGE(SYSPRINT)
PUT EDIT('SAMPLE PL1 PROGRAM \#1 EXECUTION OUTPUT',
'*****---------- INPUT ADDRESS ------------***** '||
'*****---------------------'||
' SELECTED OUTPUT ITEMS -----------------------*****',
'B HOUSE NUMBER IN-STREET-NAME '||
' ZIP CD NYPD-PCT SCHLDST '||
'LOW CROSS STREET HIGH CROSS STREET ',
'_ ____________ '||(32)'_'||' '||
'_____ __ ________ _______ '||
(25)'_'||' '||(25)'_')
(PAGE,COL(1),A,SKIP(2),COL(1),A,COL(1),A,SKIP(0),COL(1),A);
OPEN FILE(SYSPRINT) LINESIZE(133);
SIGNAL ENDPAGE(SYSPRINT);
*****************************************************************/
ON ENDFILE(INFILE) BEGIN; EOF=YES; GOTO ENDLOOP; END;
OPEN FILE(INFILE);
DO WHILE (EOF = NO);
/********** REPLACE CODE BELOW WITH YOUR OWN INPUT *************/
GET FILE(INFILE) EDIT(IN_BORO,IN_HOUSENUM,IN_STREET_NAME)
(COL(1),A(1),X(1),A(12),X(1),A(32));
/*****************************************************************/
/* TO MAKE A FUNCTION 1 CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION CODE FIELD TO 1 \*/
/* (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD \*/
/* (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER \*/
/* FIELD \*/
/* (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD \*/
/* (6) CALL GBI WITH 2 WORKAREAS \*/
/* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/*****************************************************************/
WORK1PL1 = ' ';
PIWA1_IN_FUNCTION_1 = '1';
PIWA1_IN_BORO_1 = IN_BORO;
/* for cow format the field house_number has length=16 \*/
PIWA1_IN_HOUSENUM_DISPLAY = IN_HOUSENUM;
PIWA1_IN_STREET_1 = IN_STREET_NAME;
PIWA1_IN_PLATFORM_INDICATOR = 'C';
/***************************************************************/
/***************************************************************/
/* AS OF GEOSUPPORT 10.1, \*/
/* TO RECEIVE ROADBED-SPECIFIC INFORMATION, \*/
/* SET THE ROADBED REQUEST SWITCH TO 'R', AS FOLLOWS: \*/
/* PIWA1_IN_ROADBED_REQ_SWITCH = 'R'; \*/
/***************************************************************/
CALL GBI(P1PL1,P2PL1);
IF PIWA1_OUT_RETURN_CODE ¬= '00' & PIWA1_OUT_RETURN_CODE ¬= '01'
THEN DO;
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
PUT EDIT(IN_BORO,IN_HOUSENUM,IN_STREET_NAME,
'*** FUNCTION 1 GRC =',PIWA1_OUT_RETURN_CODE,
'REASON CODE =',PIWA1_OUT_REASON_CODE,
'*** ',PIWA1_OUT_ERROR_MESSAGE)
(SKIP(2),COL(1),(7)(A,X(1)),SKIP(1),COL(49),A,A);
END;
ELSE DO;
PUT EDIT(IN_BORO,IN_HOUSENUM,IN_STREET_NAME)
(SKIP(2),COL(1),(3)(A,X(1)));
IF PIWA1_OUT_RETURN_CODE = '01'
THEN DO;
/** INSERT YOUR OWN WARNING HANDLING ROUTINE HERE \**/
PUT EDIT('*** FUNCTION 1 WARNING, GRC =',
PIWA1_OUT_RETURN_CODE,
'REASON CODE =',PIWA1_OUT_REASON_CODE,
'*** ',PIWA1_OUT_ERROR_MESSAGE)
(COL(49),(4)(A,X(1)),SKIP(1),COL(49),A,A);
END;
/****************************************************/
/***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ****/
/***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS ****/
/****************************************************/
PUT EDIT(PIWA2_FN1_ZIP,PIWA2_FN1_COM_DIST_NUM,
PIWA2_FN1_POL_PRECINCT,PIWA2_FN1_SCHL_DIST)
(COL(49),(3)(A,X(1)),X(5),A);
/***********************************************************/
/* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND \*/
/* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE \*/
/* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS \*/
/* FROM THE HIGH AND LOW STREET CODE LISTS CALL \*/
/* FUNCTION D: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION CODE FIELD TO D \*/
/* (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED \*/
/* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE \*/
/* HAS SPACE FOR ONLY 25 CHARACTERS) \*/
/* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN \*/
/* STREET NAMES FORMATTED FOR DISPLAY \*/
/* (5) MOVE WA2'S LOW B5SC FIELD TO WA1'S INPUT STREET \*/
/* CODE 1 FIELD \*/
/* (6) MOVE WA2'S HIGH B5SC FIELD TO WA1'S INPUT STREET \*/
/* CODE 2 FIELD \*/
/* (7) CALL GBI WITH 1 WORKAREA \*/
/* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/***********************************************************/
WORK1PL1 = ' ';
PIWA1_IN_PLATFORM_INDICATOR = 'C';
PIWA1_IN_FUNCTION_1 = 'D';
PIWA1_IN_SNL = '25';
PIWA1_IN_SN_NORM_FORMAT = 'C';
PIWA1_IN_BORO_1 = SUBSTR(PIWA2_FN1_LOW_B5SC(1),1,1);
PIWA1_IN_10SC_1 = SUBSTR(PIWA2_FN1_LOW_B5SC(1),2,5);
PIWA1_IN_BORO_2 = SUBSTR(PIWA2_FN1_HI_B5SC(1),1,1);
PIWA1_IN_10SC_2 = SUBSTR(PIWA2_FN1_HI_B5SC(1),2,5);
CALL GBI(P1PL1);
IF PIWA1_OUT_RETURN_CODE = '00'
THEN DO;
/******** INSERT YOUR OWN CODE HERE *******/
PUT EDIT(PIWA1_OUT_STREET_1,PIWA1_OUT_STREET_2)
(COL(75),A(25),X(1),A(25));
END;
ELSE DO;
/*** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE \***/
PUT EDIT(IN_BORO,IN_HOUSENUM,IN_STREET_NAME,
'*** FUNCTION D GRC =',
PIWA1_OUT_RETURN_CODE,
'REASON CODE =',PIWA1_OUT_REASON_CODE,',',
'*** ',PIWA1_OUT_ERROR_MESSAGE)
(SKIP(2),COL(1),(8)(A,X(1)),
SKIP(1),COL(49),A,A);
END;
END;
ENDLOOP: END;
CLOSE FILE(INFILE);
END PL1C1SC;
/*
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
/*
//INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//GO.SYSLMOD DD DSN=&&GOSET,DISP=(OLD,DELETE)
//*
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, \*//
//* ETC) ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT \*//
//* IS TAILORD TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//*
//GO.SYSPRINT DD SYSOUT=A
//GO.INFILE DD *
1 22 READE ST
1 500 DUANE ST
1 2-4 BROADWAY
4 165-100 BAISLEY BLVD
4 165-1000 BAISLEY BLVD
/*
//
*****---------- INPUT ADDRESS ------------***** *****--------------------- SELECTED OUTPUT ITEMS -----------------------*****
B HOUSE NUMBER IN-STREET-NAME ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET HIGH CROSS STREET
- ------------ -------------------------------- ----- -- -------- ------- ------------------------- -------------------------
1 22 READE ST 10007 01 005 02 ELK STREET BROADWAY
1 500 DUANE ST *** FUNCTION 1 GRC = 42 REASON CODE =
*** ADDRESS NUMBER OUT OF RANGE
1 2-4 BROADWAY *** FUNCTION 1 WARNING, GRC = 01 REASON CODE = 1
*** ADDR NUMBER ALTERED: RANGE ASSUMED. USING DIGITS BEFORE DASH ONLY
10004 01 001 02 STONE STREET BOWLING GREEN
4 165-100 BAISLEY BLVD 11434 12 113 28 GUY R BREWER BOULEVARD BEDELL STREET
4 165-1000 BAISLEY BLVD *** FUNCTION 1 GRC = 13 REASON CODE = 2
*** ADDRESS NBR 165-1000 HAS MORE THAN 3 DIGITS AFTER THE DASH.
PL/1 SAMPLE PROGRAM #2
//PL1F2SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** PL1 SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#2. ******
//*** (MSW FORMAT) ******
//********************************************************************
//STEP1 EXEC IBMZCPLG,REGION=0M,GOPGM='PL1F2SR',
// PARM.PLI='S,GS,INCLUDE',
// PARM.LKED='AMODE(31)'
//PLI.SYSLIB DD DSN=A030.GEO.COPYLIB2,DISP=SHR
// DD DSN=A030.GEO.COPYLIB,DISP=SHR
//SYSIN DD *
PL1F2SR: PROC OPTIONS(MAIN);
/******************************************************************/
/* THIS PROGRAM MAKES FUNCTION 2 AND D CALLS TO GEOSUPPORT USING \*/
/* TWO BOROS AND TWO STREET NAMES SUPPLIED BY AN INSTREAM FILE. \*/
/* FUNCTION 2 RETURNS GEOGRAPHIC INFORMATION FOR AN INTERSECTION. \*/
/* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. \*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE \*/
/* ORIGINAL CALL TO FUNCTION 2, ALL THE CROSS STREET \*/
/* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 2. \*/
/******************************************************************/
DCL EOF BIT(1) INIT('0'B),
YES BIT(1) INIT('1'B),
NO BIT(1) INIT('0'B),
ADDR BUILTIN,
(I,J) FIXED BIN(15) INIT(0);
/**************** GBI DECLARATION BELOW IS REQUIRED ****************/
DCL GBI ENTRY OPTIONS(ASM,INTER);
/*******************************************************************/
/** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BY THE %INCLUDE \**/
/** STATEMENTS) IS STRONGLY ENCOURAGED \**/
/*******************************************************************/
%INCLUDE W1PL1;
%INCLUDE W2PL1;
/***** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DECLARATION *****/
DCL INFILE FILE STREAM INPUT;
DCL IN_BORO1 CHAR(01),
IN_STREET_NAME1 CHAR(32),
IN_BORO2 CHAR(01),
IN_STREET_NAME2 CHAR(32);
/******** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *********/
DCL SYSPRINT FILE STREAM OUTPUT PRINT;
ON ENDPAGE(SYSPRINT)
PUT EDIT('SAMPLE PL1 PROGRAM \#2 EXECUTION OUTPUT',
'*****----------------- INPUT INTERSECTION '||(22)'-'||'***** '||
'*****------------ SELECTED OUTPUT ITEMS -------------*****',
'B IN-STREET-NAME-1'||(17)' '||'B IN-STREET-NAME-2'||(17)' '||
' ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET NAMES ',
'_ '||(32)'\_'||' _ '||(32)'\_'||' '||
'_____ __ ________ _______ '||(32)'\_')
(PAGE,COL(1),A,SKIP(2),COL(1),A,COL(1),A,SKIP(0),COL(1),A);
OPEN FILE(SYSPRINT) LINESIZE(133);
SIGNAL ENDPAGE(SYSPRINT);
/*****************************************************************/
ON ENDFILE(INFILE) BEGIN; EOF=YES; GOTO ENDLOOP; END;
OPEN FILE(INFILE);
DO WHILE (EOF = NO);
/********** REPLACE CODE BELOW WITH YOUR OWN INPUT *************/
GET FILE(INFILE) EDIT(IN_BORO1,IN_STREET_NAME1,
IN_BORO2,IN_STREET_NAME2)
(COL(1),A(1),X(1),A(32),X(1),A(1),X(1),A(32));
/******************************************************************/
/* TO MAKE A FUNCTION 2 CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION-CODE TO 2 \*/
/* (3) MOVE THE 1ST INPUT BORO TO WA1'S INPUT BORO CODE FIELD \*/
/* (4) MOVE THE 1ST INPUT STREET TO WA1'S INPUT STREET NAME \*/
/* FIELD \*/
/* (5) MOVE THE 2ND INPUT BORO TO WA1'S INPUT BORO CODE 2 FIELD \*/
/* (6) MOVE THE 2ND INPUT STREET TO WA1'S INPUT STREET NAME 2 \*/
/* FIELD \*/
/* (7) CALL GBI WITH 2 WORKAREAS \*/
/* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/******************************************************************/
WORK1PL1 = ' ';
GEO_WA1_IN_FUNCTION_1 = '2';
GEO_WA1_IN_BORO = IN_BORO1;
GEO_WA1_IN_STREET_1 = IN_STREET_NAME1;
GEO_WA1_IN_BORO_2 = IN_BORO2;
GEO_WA1_IN_STREET_2 = IN_STREET_NAME2;
CALL GBI(W1PL1,W2PL1);
IF GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 ¬= '00' &
GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 ¬= '01'
THEN DO;
/****** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *******/
PUT EDIT('***** FUNCTION 2 GRC =',
GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2,
'REASON =',GEO_WA1_OUT_REASON_CODE,',',
GEO_WA1_OUT_ERROR_MESSAGE,
IN_BORO1,IN_STREET_NAME1,IN_BORO2,IN_STREET_NAME2)
(SKIP(2),COL(1),(3)(A,X(1)),A,A,X(1),A,
SKIP(1),(4)(A,X(1)));
END;
ELSE
IF GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 = '01'
THEN DO;
/*** INSERT YOUR OWN WARNING HANDLING ROUTINE HERE ****/
PUT EDIT('***** FUNCTION 2 WARNING, GRC = '||
GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2||', '||
'REASON CODE = '||GEO_WA1_OUT_REASON_CODE||
', '||GEO_WA1_OUT_ERROR_MESSAGE,
IN_BORO1,IN_STREET_NAME1,
IN_BORO2,IN_STREET_NAME2)
(SKIP(2),COL(1),A,SKIP(1),(4)(A,X(1)));
END;
IF GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 = '00'|
GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 = '01'
THEN DO;
/***********************************************************/
/***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ***********/
/***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS. *****/
/***********************************************************/
PUT EDIT(IN_BORO1,IN_STREET_NAME1,IN_BORO2,IN_STREET_NAME2,
GEO_WA2_FN2_ZIP,GEO_WA2_FN2_COMDIST_NUMBER,
GEO_WA2_FN2_POL_PRECINCT,GEO_WA2_FN2_SCHOOLDIST)
(SKIP(2),COL(1),(7)(A,X(1)),X(5),A);
DO J = 1 TO GEO_WA2_FN2_NUM_OF_INTERSECTS;
/*******************************************************/
/* TO GET STREET NAMES FOR INTERSECTING STREET CODES \*/
/* MAKE A FUNCTION D CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET THE WA1'S FUNCTION CODE FIELD TO D \*/
/* (3) USE THE COMPACT STREET NAMES OPTION TO OBTAIN \*/
/* STREET NAMES FORMATTED FOR DISPLAY \*/
/* (4) MOVE THE PACKED BORO AND STREET CODE TO \*/
/* WA1'S INPUT STREET CODE 1 FIELD \*/
/* (5) CALL GBI WITH 1 WORKAREA \*/
/* (6) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/*******************************************************/
WORK1PL1 = ' ';
GEO_WA1_IN_FUNCTION_1 = 'D';
GEO_WA1_IN_COMPACT_NAME_FLAG = 'C';
GEO_WA1_IN_STREETCODE_1 = GEO_WA2_FN2_INTERSECT_PBSC(J);
CALL GBI(W1PL1);
IF GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2 = '00'
THEN DO;
/******** INSERT YOUR OWN CODE HERE *******/
PUT EDIT(GEO_WA1_OUT_STREET_1) (COL(97),A);
END;
ELSE DO;
/** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE \**/
PUT EDIT('***** FUNCTION D GRC =',
GEO_WA1_OUT_RC_1||GEO_WA1_OUT_RC_2,
'REASON =',GEO_WA1_OUT_REASON_CODE,',',
GEO_WA1_OUT_ERROR_MESSAGE)
(SKIP(2),COL(1),(6)(A,X(1)));
END;
END;
END;
ENDLOOP: END;
CLOSE FILE(INFILE);
END PL1F2SR;
/*
//LKED.SYSIN DD *
INCLUDE INCLIB(GBI)
/*
//INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//*
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATASETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//GO.SYSLMOD DD DSN=&&GOSET,DISP=(OLD,DELETE)
//*
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, \*//
//* ETC) ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT \*//
//* IS TAILORD TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//*
//GO.SYSPRINT DD SYSOUT=A
//GO.INFILE DD *
1 CHAMBERS ST 1 HUDSON ST
1 SIXTH AVE 1 W. 8 ST
1 DUANE ST 1 READE ST
/*
//
*****----------------- INPUT INTERSECTION ----------------------***** *****------------ SELECTED OUTPUT ITEMS -------------*****
B IN-STREET-NAME-1 B IN-STREET-NAME-2 ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET NAMES
\- -------------------------------- - -------------------------------- ----- -- -------- -------- --------------------------------
1 CHAMBERS ST 1 HUDSON ST 10007 01 001 02 CHAMBERS STREET
HUDSON STREET
WEST BROADWAY
1 SIXTH AVE 1 W. 8 ST 10014 02 006 02 6 AVENUE
GREENWICH AVENUE
WEST 8 STREET
***** FUNCTION 2 GRC = 62 REASON = , READE STREET & DUANE STREET DO NOT INTERSECT
1 DUANE ST 1 READE ST
C SAMPLE PROGRAM #1
//CCCF1SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** C SAMPLE MSW BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1 ****
//********************************************************************
//STEP1 EXEC EDCCLG,
// CPARM='SS,OPT,OFFSET,SOURCE,XREF,LIST'
//COMPILE.SYSPRINT DD SYSOUT=A
//COMPILE.SYSLIB DD
// DD
// DD DSNAME=A030.GEO.COPYLIB,DISP=SHR
//COMPILE.SYSIN DD *
/*****************************************************************/
/* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING \*/
/* BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE.\*/
/* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. \*/
/* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. \*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE \*/
/* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET \*/
/* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 1. \*/
/*****************************************************************/
#include <stdio.h>
#include <string.h>
/*********************************************************************/
/*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE \***/
/*** #INCLUDE STATEMENTS) IS STRONGLY ENCOURAGED. \***/
/*********************************************************************/
#include <wac.h>
/************** GBI OS LINKAGE BELOW IS REQUIRED **************/
#pragma linkage (GBI,OS)
long GBI(void \*, ...);
/***** THE WORK AREA LAYOUTS MUST BE DECLARED USING THE TYPEDEFS \***/
/***** IN THE GEOSUPPORT COPY FILE. \***/
C_WA1 wa1;
C_WA2_F1 wa2_f1;
void main ()
{
/***** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DECLARATION *****/
FILE \*inpdat;
struct tag
{
char in_boro;
char filler1;
char in_housenum [12];
char filler2;
char in_street_name [32];
char filler3 [33];
} recin ;
inpdat = fopen("DD:INPDAT","rb");
if (inpdat == NULL)
{printf("INPDAT Data Set did not open.\n");
return;}
/***** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *****/
printf("\fSAMPLE C PROGRAM \#1 EXECUTION OUTPUT ");
printf("\n\n*****---------- INPUT ADDRESS ------------***** \***");
printf("\**--------------------- SELECTED OUTPUT ITEMS ---------");
printf("--------------*****");
printf("\n\nB HOUSE NUMBER IN-STREET-NAME ");
printf(" ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET ");
printf(" HIGH CROSS STREET ");
printf("\r_ ____________ ____________________________");
printf("____ _____ __ ________ _______ _________________");
printf("________ _________________________");
/*** REPLACE CODE BELOW WITH YOUR OWN INPUT \***/
while (fread(&recin,1,sizeof(recin),inpdat))
{
/*****************************************************************/
/* TO MAKE A FUNCTION 1 CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION CODE FIELD TO 1 \*/
/* (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD \*/
/* (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER \*/
/* FIELD \*/
/* (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD \*/
/* (6) CALL GBI WITH 2 WORKAREAS \*/
/* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/*****************************************************************/
memset(&wa1,' ',sizeof(wa1));
memcpy(wa1.input.func_code,"1 ",2);
wa1.input.boro_1 = recin.in_boro ;
memcpy(wa1.input.street_name_1,recin.in_street_name,32);
memcpy(wa1.input.hse_nbr_disp,recin.in_housenum,12);
/*
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* As of Geosupport Version 10.1, \*/
/* to receive roadbed-specific information, \*/
/* set the Roadbed Request Switch to 'R', as follows: \*/
/* wa1.input.roadbedreq = 'R'; \*/
/* \*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* \*/
GBI(&wa1,&wa2_f1);
if ( (memcmp(wa1.output.ret_code,"01",2)) > 0
|| (memcmp(wa1.output.ret_code,"00",2)) < 0 )
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
{
printf("\n\n%c %.12s %.32s *** FUNCTION 1 GRC = %.2s"
" REASON CODE = %c",
recin.in_boro,recin.in_housenum,recin.in_street_name,
wa1.output.ret_code,wa1.output.reject_reason_code) ;
printf ("\n%51.5s %.80s", "\***", wa1.output.msg) ;
}
if ( (memcmp(wa1.output.ret_code,"01",2)) == 0 )
/******** INSERT YOUR OWN WARNING HANDLING ROUTINE HERE *****/
{
printf("\n\n%c %.12s %.32s *** FUNCTION 1 WARNING, GRC = %.2s"
" REASON CODE = %c",
recin.in_boro,recin.in_housenum,recin.in_street_name,
wa1.output.ret_code,wa1.output.reject_reason_code) ;
printf ("\n%51.5s %.80s", "\***", wa1.output.msg) ;
printf("\n%47.1s %.5s %.2s %.3s %.2s",
" ",wa2_f1.zip_code,
wa2_f1.com_dist+1,wa2_f1.police_pre,wa2_f1.com_schl_dist) ;
}
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0 )
/***********************************************************/
/***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ***********/
/***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****/
/***********************************************************/
printf("\n\n%c %.12s %.31s %.5s %.2s %.3s %.2s",
recin.in_boro,recin.in_housenum,recin.in_street_name,
wa2_f1.zip_code,
wa2_f1.com_dist+1,wa2_f1.police_pre,wa2_f1.com_schl_dist) ;
/************************************************************/
/* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND \*/
/* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE \*/
/* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS \*/
/* FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION CODE FIELD TO D \*/
/* (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED \*/
/* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE \*/
/* HAS SPACE FOR ONLY 25 CHARACTERS) \*/
/* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN \*/
/* STREET NAMES FORMATTED FOR DISPLAY \*/
/* (5) MOVE WA2'S LOW PBSC FIELD TO WA1'S INPUT STREET \*/
/* CODE 1 FIELD \*/
/* (6) MOVE WA2'S HIGH PBSC FIELD TO WA1'S INPUT STREET \*/
/* CODE 2 FIELD \*/
/* (7) CALL GBI WITH 1 WORKAREA \*/
/* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/************************************************************/
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0
|| (memcmp(wa1.output.ret_code,"01",2)) == 0 )
{
memset(&wa1,' ',sizeof(wa1)); /* Clear Work area 1 \*/
wa1.input.func_code[0] = 'D' ;
wa1.input.compact_flag = 'C' ;
memcpy(wa1.input.snl,"25",2) ;
memcpy(wa1.input.PB5SC_1,wa2_f1.l_x_sts[0],4) ;
memcpy(wa1.input.PB5SC_2,wa2_f1.h_x_sts[0],4) ;
GBI(&wa1);
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0 )
/***** INSERT YOUR OWN CODE HERE ***********/
printf(" %.25s %.25s",wa1.output.street_name_1,
wa1.output.street_name_2) ;
else
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
{
printf("\n\n%c %.12s %.32s *** FUNCTION D GRC = %.2s"
" REASON CODE = %c",
recin.in_boro,recin.in_housenum,recin.in_street_name,
wa1.output.ret_code,wa1.output.reject_reason_code) ;
printf ("\n%51.5s %.80s", "\***", wa1.output.msg) ;
}
}
}
}
/*
//LKED.SYSIN DD *
INCLUDE DD1(GBI)
/*
//LKED.DD1 DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//***************************************************************
//*
//* AS OF GEOSUPPORT VERSION 10.0, THE STEPLIB OR JOBLIB
//* STATEMENTS OF THE GEOSUPPORT EXECUTION STEP MUST INCLUDE
//* THE FOLLOWING TWO CONCATENATED DATA SETS IN THE SPECIFIED
//* ORDER:
//* A030.GEO.SUPPORT.PDSE.LOADLIB
//* A030.GEO.SUPPORT.LOADLIB
//*
//***************************************************************
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//***************************************************************
//*
//* AS OF GEOSUPPORT VERSION 10.0, DD STATEMENTS FOR GEOSUPPORT
//* DATA FILES (E.G. GRID, PAD, ETC) ARE NO LONGER NEEDED AND
//* ARE IGNORED. GEOSUPPORT IS TAILORED TO USE STANDARD
//* GEOSUPPORT DATA SETS. TO USE NON-STANDARD FILES, SEE YOUR
//* SYSTEMS PROGRAMMER.
//*
//***************************************************************
//GO.SYSPRINT DD SYSOUT=A
//GO.INPDAT DD \*,DCB=LRECL=80
1 22 READE ST
1 500 DUANE ST
1 2-4 BROADWAY
4 165-100 BAISLEY BLVD
4 165-1000 BAISLEY BLVD
/*
//
//CCCC1SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** C SAMPLE COW BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1 ****
//********************************************************************
//*
//STEP1 EXEC EDCCLG,
// CPARM='SS,OPT,OFFSET,SOURCE,XREF,LIST'
//COMPILE.SYSPRINT DD SYSOUT=A
//COMPILE.SYSLIB DD
// DD
// DD DSNAME=A030.GEO.COPYLIB,DISP=SHR
//COMPILE.SYSIN DD *
/*****************************************************************/
/* THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING \*/
/* BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE.\*/
/* FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. \*/
/* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. \*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE \*/
/* ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET \*/
/* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 1. \*/
/*****************************************************************/
#include <stdio.h>
#include <string.h>
/*********************************************************************/
/*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE \***/
/*** #INCLUDE STATEMENTS) IS STRONGLY ENCOURAGED. \***/
/*********************************************************************/
#include <pac.h>
/************** GBI OS LINKAGE BELOW IS REQUIRED **************/
#pragma linkage (GBI,OS)
long GBI(void \*, ...);
/***** THE WORK AREA LAYOUTS MUST BE DECLARED USING THE TYPEDEFS \***/
/***** IN THE GEOSUPPORT COPY FILE. \***/
C_WA1 wa1;
C_WA2_F1 wa2_f1;
void main ()
/***** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DECLARATION *****/
FILE \*inpdat;
struct tag
{
char in_boro;
char filler1;
char in_housenum [12];
char filler2;
char in_street_name [32];
char filler3 [33];
} recin ;
inpdat = fopen("DD:INPDAT","rb");
if (inpdat == NULL)
{printf("INPDAT Data Set did not open.\n");
return;}
/***** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *****/
printf("\fSAMPLE C PROGRAM \#1 EXECUTION OUTPUT ");
printf("\n\n*****---------- INPUT ADDRESS ------------***** \***");
printf("\**--------------------- SELECTED OUTPUT ITEMS ---------");
printf("--------------*****");
printf("\n\nB HOUSE NUMBER IN-STREET-NAME ");
printf(" ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET ");
printf(" HIGH CROSS STREET ");
printf("\r_ ____________ ____________________________");
printf("____ _____ __ ________ _______ _________________");
printf("________ _________________________");
/*** REPLACE CODE BELOW WITH YOUR OWN INPUT \***/
while (fread(&recin,1,sizeof(recin),inpdat))
{
/*****************************************************************/
/* TO MAKE A FUNCTION 1 CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION CODE FIELD TO 1 \*/
/* (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD \*/
/* (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER \*/
/* FIELD \*/
/* (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD \*/
/* (6) CALL GBI WITH 2 WORKAREAS \*/
/* (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/*****************************************************************/
memset(&wa1,' ',sizeof(wa1));
memcpy(wa1.input.func_code,"1 ",2);
wa1.input.sti??(0??).boro = recin.in_boro ;
memcpy(wa1.input.sti??(0??).Street_name,recin.in_street_name,32);
/* Please note that the house number field is actually \*/
/* 16 bytes. If you are only using 12 bytes, it is \*/
/* critical that you blank out the work area before \*/
/* you move in the house number \*/
memcpy(wa1.input.hse_nbr_disp,recin.in_housenum,12);
wa1.input.platform_ind = 'C'; /* Tells Geosupport that you \*/
/* are using the character \*/
/*
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* As of Geosupport Version 10.1, \*/
/* to receive roadbed-specific information, \*/
/* set the Roadbed Request Switch to 'R', as follows: \*/
/* wa1.input.roadbedrequest = 'R'; \*/
/* \*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* \*/
GBI(&wa1,&wa2_f1);
if ( (memcmp(wa1.output.ret_code,"01",2)) > 0
|| (memcmp(wa1.output.ret_code,"00",2)) < 0 )
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
{
printf("\n\n%c %.12s %.32s *** FUNCTION 1 GRC = %.2s"
" REASON CODE = %c",
recin.in_boro,recin.in_housenum,recin.in_street_name,
wa1.output.ret_code,wa1.output.reason_code) ;
printf ("\n%51.5s %.80s", "\***", wa1.output.msg) ;
}
if ( (memcmp(wa1.output.ret_code,"01",2)) == 0 )
/******** INSERT YOUR OWN WARNING HANDLING ROUTINE HERE *****/
{
printf("\n\n%c %.12s %.32s *** FUNCTION 1 WARNING, GRC = %.2s"
" REASON CODE = %c",
recin.in_boro,recin.in_housenum,recin.in_street_name,
wa1.output.ret_code,wa1.output.reason_code) ;
printf ("\n%51.5s %.80s", "\***", wa1.output.msg) ;
printf("\n%47.1s %.5s %.2s %.3s %.2s",
" ",wa2_f1.zip_code,
wa2_f1.com_dist+1,wa2_f1.police_pre,wa2_f1.com_schl_dist) ;
}
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0 )
/***********************************************************/
/***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ***********/
/***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****/
/***********************************************************/
printf("\n\n%c %.12s %.31s %.5s %.2s %.3s %.2s",
recin.in_boro,recin.in_housenum,recin.in_street_name,
wa2_f1.zip_code,
wa2_f1.com_dist+1,wa2_f1.police_pre,wa2_f1.com_schl_dist) ;
/************************************************************/
/* THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND \*/
/* ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE \*/
/* FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS \*/
/* FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION CODE FIELD TO D \*/
/* (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED \*/
/* VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE \*/
/* HAS SPACE FOR ONLY 25 CHARACTERS) \*/
/* (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN \*/
/* STREET NAMES FORMATTED FOR DISPLAY \*/
/* (5) MOVE WA2'S LOW PBSC FIELD TO WA1'S INPUT STREET \*/
/* CODE 1 FIELD \*/
/* (6) MOVE WA2'S HIGH PBSC FIELD TO WA1'S INPUT STREET \*/
/* CODE 2 FIELD \*/
/* (7) CALL GBI WITH 1 WORKAREA \*/
/* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/************************************************************/
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0
|| (memcmp(wa1.output.ret_code,"01",2)) == 0 )
{
memset(&wa1,' ',sizeof(wa1)); /* Clear Work area 1 \*/
wa1.input.func_code[0] = 'D' ;
wa1.input.st_name_norm = 'C' ;
memcpy(wa1.input.snl,"25",2) ;
wa1.input.platform_ind = 'C';
wa1.input.sti??(0??).boro=wa2_f1.st??(0??).B5SC??(0??)??(0??);
memcpy(wa1.input.sti??(0??).SC10,
wa2_f1.st??(0??).B5SC??(0??)+1,5);
wa1.input.sti??(1??).boro=wa2_f1.st??(1??).B5SC??(0??)??(0??);
memcpy(wa1.input.sti??(1??).SC10,
wa2_f1.st??(1??).B5SC??(0??)+1,5);
GBI(&wa1);
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0 )
/***** INSERT YOUR OWN CODE HERE ***********/
printf(" %.25s %.25s",wa1.output.sto??(0??).Street_name,
wa1.output.sto??(1??).Street_name) ;
else
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
{
printf("\n\n%c %.12s %.32s *** FUNCTION D GRC = %.2s"
" REASON CODE = %c",
recin.in_boro,recin.in_housenum,recin.in_street_name,
wa1.output.ret_code,wa1.output.reason_code) ;
printf ("\n%51.5s %.80s", "\***", wa1.output.msg) ;
}
}
}
}
/*
//LKED.SYSIN DD *
INCLUDE DD1(GBI)
/*
//LKED.DD1 DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//***************************************************************
//*
//* AS OF GEOSUPPORT VERSION 10.0, THE STEPLIB OR JOBLIB
//* STATEMENTS OF THE GEOSUPPORT EXECUTION STEP MUST INCLUDE
//* THE FOLLOWING TWO CONCATENATED DATA SETS IN THE SPECIFIED
//* ORDER:
//* A030.GEO.SUPPORT.PDSE.LOADLIB
//* A030.GEO.SUPPORT.LOADLIB
//*
//***************************************************************
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//***************************************************************
//*
//* AS OF GEOSUPPORT VERSION 10.0, DD STATEMENTS FOR GEOSUPPORT
//* DATA FILES (E.G. GRID, PAD, ETC) ARE NO LONGER NEEDED AND
//* ARE IGNORED. GEOSUPPORT IS TAILORED TO USE STANDARD
//* GEOSUPPORT DATA SETS. TO USE NON-STANDARD FILES, SEE YOUR
//* SYSTEMS PROGRAMMER.
//*
//***************************************************************
//GO.SYSPRINT DD SYSOUT=A
//GO.INPDAT DD \*,DCB=LRECL=80
1 22 READE ST
1 500 DUANE ST
1 2-4 BROADWAY
4 165-100 BAISLEY BLVD
4 165-1000 BAISLEY BLVD
/*
//
*****---------- INPUT ADDRESS ------------***** *****--------------------- SELECTED OUTPUT ITEMS -----------------------*****
B HOUSE NUMBER IN-STREET-NAME ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET HIGH CROSS STREET
\- ------------ -------------------------------- ----- -- -------- ------- ------------------------- -------------------------
1 22 READE ST 10007 01 005 02 ELK STREET BROADWAY
1 500 DUANE ST *** FUNCTION 1 GRC = 42 REASON CODE =
*** ADDRESS NUMBER OUT OF RANGE
1 2-4 BROADWAY *** FUNCTION 1 WARNING, GRC = 01 REASON CODE = 1
*** ADDR NUMBER ALTERED: RANGE ASSUMED. USING DIGITS BEFORE DASH ONLY
10004 01 001 02 STONE STREET BOWLING GREEN
4 165-100 BAISLEY BLVD 11434 12 113 28 GUY R BREWER BOULEVARD BEDELL STREET
4 165-1000 BAISLEY BLVD *** FUNCTION 1 GRC = 13 REASON CODE = 2
*** ADDRESS NBR 165-1000 HAS MORE THAN 3 DIGITS AFTER THE DASH.
C SAMPLE PROGRAM #2
//CCCF2SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** C SAMPLE MSW BATCH GEOSUPPORT USER APPLICATION PROGRAM \#2 ****
//********************************************************************
//*
//STEP1 EXEC EDCCLG,
// CPARM='SS,OPT,OFFSET,SOURCE,XREF,LIST'
//COMPILE.SYSPRINT DD SYSOUT=A
//COMPILE.SYSLIB DD
// DD
// DD DSNAME=A030.GEO.COPYLIB,DISP=SHR
//COMPILE.SYSIN DD *
/*****************************************************************/
/* THIS PROGRAM MAKES FUNCTION 2 AND D CALLS TO GEOSUPPORT USING \*/
/* TWO BOROS AND TWO STREET NAMES SUPPLIED BY AN INSTREAM FILE. \*/
/* FUNCTION 2 RETURNS GEOGRAPHIC INFORMATION FOR AN INTERSECTION.\*/
/* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. \*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE \*/
/* ORIGINAL CALL TO FUNCTION 2, ALL THE CROSS STREET \*/
/* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 2. \*/
/*****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*********************************************************************/
/*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE \***/
/*** #INCLUDE STATEMENTS) IS STRONGLY ENCOURAGED. \***/
/*********************************************************************/
#include <wac.h>
/************** GBI DECLARATION BELOW IS REQUIRED **************/
#pragma linkage (GBI,OS)
long GBI(void \*, ...);
/***** THE WORK AREA LAYOUTS MUST BE DECLARED USING THE TYPEDEFS \***/
/***** IN THE GEOSUPPORT COPY FILE. \***/
C_WA1 wa1;
C_WA2_F2 wa2_f2;
void main ()
{
/***** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DECLARATION *****/
FILE \*infile;
struct tag
{
char in_boro1;
char filler1;
char in_street_name1 [32];
char filler2;
char in_boro2;
char filler3;
char in_street_name2 [32];
char filler4 [11];
} recin ;
short int j, i;
char temp [2];
if ((infile = fopen("DD:INFILE","rb")) == NULL)
{printf("INFILE Data Set did not open.\n");
return;}
/***** REPLACE CODE BELOW WITH YOUR OWN REPRORT LAYOUT *****/
printf("\fSAMPLE C PROGRAM \#2 EXECUTION OUTPUT ");
printf("\n\n*****----------------- INPUT INTERSECTION ---------");
printf("-------------***** *****------------ SELECTED OUTPUT ");
printf("ITEMS -------------*****");
printf("\n\nB IN-STREET-NAME-1 ");
printf(" B IN-STREET-NAME-2 ZIP CD");
printf(" NYPD-PCT SCHLDST INTERSECTING STREET NAMES");
printf( "\r_ ____________________________");
printf("____ _ ________________________________ _____ \__");
printf(" ________ _______ _________________________________");
/*** REPLACE CODE BELOW WITH YOUR OWN INPUT \***/
while (fread(&recin,1,sizeof(recin),infile))
{
/******************************************************************/
/* TO MAKE A FUNCTION 2 CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION-CODE TO 2 \*/
/* (3) MOVE THE 1ST INPUT BORO TO WA1'S INPUT BORO CODE FIELD \*/
/* (4) MOVE THE 1ST INPUT STREET TO WA1'S INPUT STREET NAME \*/
/* FIELD \*/
/* (5) MOVE THE 2ND INPUT BORO TO WA1'S INPUT BORO CODE 2 FIELD \*/
/* (6) MOVE THE 2ND INPUT STREET TO WA1'S INPUT STREET NAME 2 \*/
/* FIELD \*/
/* (7) CALL GBI WITH 2 WORKAREAS \*/
/* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/******************************************************************/
memset(&wa1,' ',sizeof(wa1));
memcpy(wa1.input.func_code,"2 ",2);
wa1.input.boro_1 = recin.in_boro1 ;
memcpy(wa1.input.street_name_1,recin.in_street_name1,32);
wa1.input.boro_2 = recin.in_boro2 ;
memcpy(wa1.input.street_name_2,recin.in_street_name2,32);
GBI(&wa1,&wa2_f2);
if ( (memcmp(wa1.output.ret_code,"01",2)) > 0
|| (memcmp(wa1.output.ret_code,"00",2)) < 0 )
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
{
printf("\n\n***** FUNCTION 2 GRC = %.2s"
" REASON CODE = %c. %.80s",
wa1.output.ret_code,wa1.output.reject_reason_code,
wa1.output.msg) ;
printf
("\n%c %.32s %c %.32s ",
recin.in_boro1,recin.in_street_name1,recin.in_boro2,
recin.in_street_name2) ;
}
if ( (memcmp(wa1.output.ret_code,"01",2)) == 0 )
/******** INSERT YOUR OWN WARNING HANDLING ROUTINE HERE *****/
{
printf("\n\n***** FUNCTION 2 WARNING GRC = %.2s"
" REASON CODE = %c. %.80s",
wa1.output.ret_code,wa1.output.reject_reason_code,
wa1.output.msg) ;
printf
("\n%c %.32s %c %.32s ",
recin.in_boro1,recin.in_street_name1,recin.in_boro2,
recin.in_street_name2) ;
}
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0
|| (memcmp(wa1.output.ret_code,"01",2)) == 0 )
/***********************************************************/
/***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ***********/
/***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****/
/***********************************************************/
{
printf("\n\n%c %.32s %c %.32s %.5s %.2s %.3s %.2s ",
recin.in_boro1,recin.in_street_name1,recin.in_boro2,
recin.in_street_name2,wa2_f2.zip_code,
wa2_f2.com_dist+1,wa2_f2.police_pre,wa2_f2.com_schl_dist) ;
temp [0] = wa2_f2.nbr_x_sts ;
temp [1] = 0;
i = atoi(temp) ;
for (j=0; j<i; j++)
{
/*******************************************************/
/* TO GET STREET NAMES FOR INTERSECTING STREET CODES \*/
/* MAKE A FUNCTION D CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET THE WA1'S FUNCTION CODE FIELD TO D \*/
/* (3) USE THE COMPACT STREET NAMES OPTION TO OBTAIN \*/
/* STREET NAMES FORMATTED FOR DISPLAY \*/
/* (4) MOVE THE PACKED BORO AND STREET CODE TO \*/
/* WA1'S INPUT STREET CODE 1 FIELD \*/
/* (5) CALL GBI WITH 1 WORKAREA \*/
/* (6) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/*******************************************************/
memset(&wa1,' ',sizeof(wa1));
wa1.input.func_code[0] = 'D' ;
wa1.input.compact_flag = 'C' ;
memcpy(wa1.input.PB5SC_1,wa2_f2.x_sts[j],4) ;
GBI(&wa1);
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0 )
{
/***** INSERT YOUR OWN CODE HERE ***********/
if (j==0)
printf(" %.32s",wa1.output.street_name_1);
else
printf("\n%128.32s",wa1.output.street_name_1);
}
else
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
printf("\n\n***** FUNCTION D GRC = %.2s"
" REASON CODE = %c. %.80s",
wa1.output.ret_code,wa1.output.reject_reason_code,
wa1.output.msg) ;
}
}
}
}
/*
//LKED.SYSIN DD *
INCLUDE DD1(GBI)
/*
//LKED.DD1 DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//***************************************************************
//*
//* AS OF GEOSUPPORT VERSION 10.0, THE STEPLIB OR JOBLIB
//* STATEMENTS OF THE GEOSUPPORT EXECUTION STEP MUST INCLUDE
//* THE FOLLOWING TWO CONCATENATED DATA SETS IN THE SPECIFIED
//* ORDER:
//* A030.GEO.SUPPORT.PDSE.LOADLIB
//* A030.GEO.SUPPORT.LOADLIB
//*
//***************************************************************
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//***************************************************************
//*
//* AS OF GEOSUPPORT VERSION 10.0, DD STATEMENTS FOR GEOSUPPORT
//* DATA FILES (E.G. GRID, PAD, ETC) ARE NO LONGER NEEDED AND
//* ARE IGNORED. GEOSUPPORT IS TAILORED TO USE STANDARD
//* GEOSUPPORT DATA SETS. TO USE NON-STANDARD FILES, SEE YOUR
//* SYSTEMS PROGRAMMER.
//*
//***************************************************************
//GO.SYSPRINT DD SYSOUT=A
//GO.INFILE DD *
1 CHAMBERS ST 1 HUDSON ST
1 SIXTH AVE 1 W. 8 ST
1 DUANE ST 1 READE ST
/*
//
//CCCC2SRC JOB YOUR-JOB-CARD-INFORMATION
//*
//********************************************************************
//*** C SAMPLE COW BATCH GEOSUPPORT USER APPLICATION PROGRAM \#2 ****
//********************************************************************
//*
//STEP1 EXEC EDCCLG,
// CPARM='SS,OPT,OFFSET,SOURCE,XREF,LIST'
//COMPILE.SYSPRINT DD SYSOUT=A
//COMPILE.SYSLIB DD
// DD
// DD DSNAME=A030.GEO.COPYLIB,DISP=SHR
//COMPILE.SYSIN DD *
/*****************************************************************/
/* THIS PROGRAM MAKES FUNCTION 2 AND D CALLS TO GEOSUPPORT USING \*/
/* TWO BOROS AND TWO STREET NAMES SUPPLIED BY AN INSTREAM FILE. \*/
/* FUNCTION 2 RETURNS GEOGRAPHIC INFORMATION FOR AN INTERSECTION.\*/
/* FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. \*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*/
/* NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE \*/
/* ORIGINAL CALL TO FUNCTION 2, ALL THE CROSS STREET \*/
/* NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 2. \*/
/*****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*********************************************************************/
/*** USE OF GEOSUPPORT COPY LIBRARIES (REFERENCED BELOW BY THE \***/
/*** #INCLUDE STATEMENTS) IS STRONGLY ENCOURAGED. \***/
/*********************************************************************/
#include <pac.h>
/************** GBI DECLARATION BELOW IS REQUIRED **************/
#pragma linkage (GBI,OS)
long GBI(void \*, ...);
/***** THE WORK AREA LAYOUTS MUST BE DECLARED USING THE TYPEDEFS \***/
/***** IN THE GEOSUPPORT COPY FILE. \***/
C_WA1 wa1;
C_WA2_F2 wa2_f2;
void main ()
{
/***** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DECLARATION *****/
FILE \*infile;
struct tag
{
char in_boro1;
char filler1;
char in_street_name1 [32];
char filler2;
char in_boro2;
char filler3;
char in_street_name2 [32];
char filler4 [11];
} recin ;
short int j, i;
char temp [2];
if ((infile = fopen("DD:INFILE","rb")) == NULL)
{printf("INFILE Data Set did not open.\n");
return;}
/***** REPLACE CODE BELOW WITH YOUR OWN REPRORT LAYOUT *****/
printf("\fSAMPLE C PROGRAM \#2 EXECUTION OUTPUT ");
printf("\n\n*****----------------- INPUT INTERSECTION ---------");
printf("-------------***** *****------------ SELECTED OUTPUT ");
printf("ITEMS -------------*****");
printf("\n\nB IN-STREET-NAME-1 ");
printf(" B IN-STREET-NAME-2 ZIP CD");
printf(" NYPD-PCT SCHLDST INTERSECTING STREET NAMES");
printf( "\r_ ____________________________");
printf("____ _ ________________________________ _____ \__");
printf(" ________ _______ _________________________________");
/*** REPLACE CODE BELOW WITH YOUR OWN INPUT \***/
while (fread(&recin,1,sizeof(recin),infile))
{
/******************************************************************/
/* TO MAKE A FUNCTION 2 CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET WA1'S FUNCTION-CODE TO 2 \*/
/* (3) MOVE THE 1ST INPUT BORO TO WA1'S INPUT BORO CODE FIELD \*/
/* (4) MOVE THE 1ST INPUT STREET TO WA1'S INPUT STREET NAME \*/
/* FIELD \*/
/* (5) MOVE THE 2ND INPUT BORO TO WA1'S INPUT BORO CODE 2 FIELD \*/
/* (6) MOVE THE 2ND INPUT STREET TO WA1'S INPUT STREET NAME 2 \*/
/* FIELD \*/
/* (7) CALL GBI WITH 2 WORKAREAS \*/
/* (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/******************************************************************/
memset(&wa1,' ',sizeof(wa1));
memcpy(wa1.input.func_code,"2 ",2);
wa1.input.sti??(0??).boro = recin.in_boro1 ;
memcpy(wa1.input.sti??(0??).Street_name,recin.in_street_name1,32);
wa1.input.sti??(1??).boro = recin.in_boro2 ;
memcpy(wa1.input.sti??(1??).Street_name,recin.in_street_name2,32);
wa1.input.platform_ind = 'C'; /* Tells Geosupport that you \*/
/* are using the character \*/
/* only work areas \*/
GBI(&wa1,&wa2_f2);
if ( (memcmp(wa1.output.ret_code,"01",2)) > 0
|| (memcmp(wa1.output.ret_code,"00",2)) < 0 )
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
{
printf("\n\n***** FUNCTION 2 GRC = %.2s"
" REASON CODE = %c. %.80s",
wa1.output.ret_code,wa1.output.reason_code,
wa1.output.msg) ;
printf
("\n%c %.32s %c %.32s ",
recin.in_boro1,recin.in_street_name1,recin.in_boro2,
recin.in_street_name2) ;
}
if ( (memcmp(wa1.output.ret_code,"01",2)) == 0 )
/******** INSERT YOUR OWN WARNING HANDLING ROUTINE HERE *****/
{
printf("\n\n***** FUNCTION 2 WARNING GRC = %.2s"
" REASON CODE = %c. %.80s",
wa1.output.ret_code,wa1.output.reason_code,
wa1.output.msg) ;
printf
("\n%c %.32s %c %.32s ",
recin.in_boro1,recin.in_street_name1,recin.in_boro2,
recin.in_street_name2) ;
}
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0
|| (memcmp(wa1.output.ret_code,"01",2)) == 0 )
/***********************************************************/
/***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR ***********/
/***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****/
/***********************************************************/
{
printf("\n\n%c %.32s %c %.32s %.5s %.2s %.3s %.2s ",
recin.in_boro1,recin.in_street_name1,recin.in_boro2,
recin.in_street_name2,wa2_f2.zip_code,
wa2_f2.com_dist+1,wa2_f2.police_pre,wa2_f2.com_schl_dist) ;
temp [0] = wa2_f2.inter.nbr_sts ;
temp [1] = 0;
i = atoi(temp) ;
for (j=0; j<i; j++)
{
/*******************************************************/
/* TO GET STREET NAMES FOR INTERSECTING STREET CODES \*/
/* MAKE A FUNCTION D CALL: \*/
/* (1) INITIALIZE WORKAREA 1 TO SPACES \*/
/* (2) SET THE WA1'S FUNCTION CODE FIELD TO D \*/
/* (3) USE THE COMPACT STREET NAMES OPTION TO OBTAIN \*/
/* STREET NAMES FORMATTED FOR DISPLAY \*/
/* (4) MOVE THE PACKED BORO AND STREET CODE TO \*/
/* WA1'S INPUT STREET CODE 1 FIELD \*/
/* (5) CALL GBI WITH 1 WORKAREA \*/
/* (6) CHECK RETURN CODES FOR ERRORS OR WARNINGS \*/
/*******************************************************/
memset(&wa1,' ',sizeof(wa1));
wa1.input.func_code[0] = 'D' ;
wa1.input.st_name_norm = 'C' ;
wa1.input.platform_ind = 'C';
wa1.input.sti??(0??).boro = wa2_f2.inter.B5SC??(j??)??(0??);
memcpy(wa1.input.sti??(0??).SC10,wa2_f2.inter.B5SC??(j??)+1,5);
GBI(&wa1);
if ( (memcmp(wa1.output.ret_code,"00",2)) == 0 )
{
/***** INSERT YOUR OWN CODE HERE ***********/
if (j==0)
printf(" %.32s",wa1.output.sto??(0??).Street_name);
else
printf("\n%128.32s",wa1.output.sto??(0??).Street_name);
}
else
/******** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****/
printf("\n\n***** FUNCTION D GRC = %.2s"
" REASON CODE = %c. %.80s",
wa1.output.ret_code,wa1.output.reason_code,
wa1.output.msg) ;
}
}
}
}
/*
//LKED.SYSIN DD *
INCLUDE DD1(GBI)
/*
//LKED.DD1 DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//***************************************************************
//*
//* AS OF GEOSUPPORT VERSION 10.0, THE STEPLIB OR JOBLIB
//* STATEMENTS OF THE GEOSUPPORT EXECUTION STEP MUST INCLUDE
//* THE FOLLOWING TWO CONCATENATED DATA SETS IN THE SPECIFIED
//* ORDER:
//* A030.GEO.SUPPORT.PDSE.LOADLIB
//* A030.GEO.SUPPORT.LOADLIB
//*
//***************************************************************
//GO.STEPLIB DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//***************************************************************
//*
//* AS OF GEOSUPPORT VERSION 10.0, DD STATEMENTS FOR GEOSUPPORT
//* DATA FILES (E.G. GRID, PAD, ETC) ARE NO LONGER NEEDED AND
//* ARE IGNORED. GEOSUPPORT IS TAILORED TO USE STANDARD
//* GEOSUPPORT DATA SETS. TO USE NON-STANDARD FILES, SEE YOUR
//* SYSTEMS PROGRAMMER.
//*
//***************************************************************
//GO.SYSPRINT DD SYSOUT=A
//GO.INFILE DD *
1 CHAMBERS ST 1 HUDSON ST
1 SIXTH AVE 1 W. 8 ST
1 DUANE ST 1 READE ST
/*
//
*****----------------- INPUT INTERSECTION ----------------------***** *****------------ SELECTED OUTPUT ITEMS -------------*****
B IN-STREET-NAME-1 B IN-STREET-NAME-2 ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET NAMES
\- -------------------------------- - -------------------------------- ----- -- -------- ------- ---------------------------------
1 CHAMBERS ST 1 HUDSON ST 10007 01 001 02 CHAMBERS STREET
HUDSON STREET
WEST BROADWAY
1 SIXTH AVE 1 W. 8 ST 10014 02 006 02 6 AVENUE
GREENWICH AVENUE
WEST 8 STREET
***** FUNCTION 2 GRC = 62 REASON CODE = . READE STREET & DUANE STREET DO NOT INTERSECT
1 DUANE ST 1 READE ST
NATURAL SAMPLE PROGRAM #1
0010 ************************************************************************
0020 * PGM NAME: GEOBUPG1 DATE: 08-18-98 *
0030 * *
0040 * THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING *
0050 * BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE. *
0060 * FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. *
0070 * FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
0080 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
0090 * NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
0100 * ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET *
0110 * NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 1. *
0120 ************************************************************************
0130 * *
0140 ************************************************************************
0150 * USE OF GEOSUPPORT LDA (REFERENCED BELOW BY THE LOCAL USING STATEMENT)*
0160 * IS STRONGLY ENCOURAGED. *
0170 ************************************************************************
0180 DEFINE DATA
0190 LOCAL USING GEOLW1
0200 LOCAL USING GEOLW2
0210 *
0220 ***** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DECLARATION *****
0230 LOCAL
0240 01 #USER-INPUT
0250 02 #USER-BORO (A1)
0260 02 #FILLER1 (A1)
0270 02 #USER-HSE-NUM (A12)
0280 02 #FILLER2 (A1)
0290 02 #USER-STRT-NAME (A32)
0300 02 #FILLER3 (A33)
0310 *
0320 01 #SAVE-RET-CODE (A2)
0330 01 #OUT-STREET-1-SNL25 (A25)
0340 01 #OUT-STREET-2-SNL25 (A25)
0350 01 #OUT-ERROR-MESSAGE-77 (A77)
0360 *
0370 END-DEFINE
0380 *
0390 FORMAT LS=133 PS=65
0400 *
0410 ***** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *****
0420 WRITE NOTITLE
0430 1T'SAMPLE NATURAL PROGRAM #1 EXECUTION OUTPUT'//
0440 1T'*****---------- INPUT ADDRESS ------------*****'
0450 49T'*****--------------------- SELECTED OUTPUT'
0460 92T'ITEMS -----------------------*****'//
0470 1T'B HOUSE NUMBER IN-STREET-NAME ZIP CD'
0480 58T'NYPD-PCT SCHLDST LOW CROSS STREET '
0490 101T'HIGH CROSS STREET '/
0500 1T'- ------------ -------------------------------- ----- --'
0510 58T'-------- ------- -------------------------'
0520 101T'-------------------------'/
0530 *
0540 READ WORK FILE 01 #USER-INPUT
0550 PERFORM FN1-PROCESS
0560 END-WORK
0570 *
0580 DEFINE SUBROUTINE FN1-PROCESS
0590 ************************************************************************
0600 * TO MAKE A FUNCTION 1 CALL: *
0610 * (1) INITIALIZE WORKAREA 1 TO SPACES *
0620 * (2) SET WA1'S FUNCTION CODE FIELD TO 1 *
0630 * (3) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
0640 * (4) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER FIELD *
0650 * (5) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
0660 * (6) CALL GBI WITH 2 WORKAREAS *
0670 * (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
0680 ************************************************************************
0690 ************************************************************************
0700 * AS OF GEOSUPPORT 10.1, *
0710 * TO RECEIVE ROADBED-SPECIFIC INFORMATION, *
0720 * SET THE ROADBED REQUEST SWITCH TO 'R', AS FOLLOWS: *
0730 * MOVE 'R' TO GEO-WA1-IN-ROADBED-REQ-SWITCH. *
0740 ************************************************************************
0750 RESET GEOLW1
0760 MOVE '1 ' TO GEO-WA1-IN-FUNCTION-CODE
0770 MOVE #USER-BORO TO GEO-WA1-IN-BORO
0780 MOVE #USER-HSE-NUM TO GEO-WA1-IN-HOUSENUM
0790 MOVE #USER-STRT-NAME TO GEO-WA1-IN-STREET-1
0800 *
0810 CALL 'GBI' W1NAT W2NAT
0820 *
0830 IF GEO-WA1-OUT-RETURN-CODE NOT = '00' AND
0840 GEO-WA1-OUT-RETURN-CODE NOT = '01'
0850 *
0860 ***** REPLACE YOUR OWN ERROR HANDLING ROUTINE HERE *****
0870 *
0880 MOVE GEO-WA1-OUT-ERROR-MESSAGE TO #OUT-ERROR-MESSAGE-77
0890 WRITE NOTITLE
0900 1T #USER-BORO 3T #USER-HSE-NUM 16T #USER-STRT-NAME
0910 49T '*** FUNCTION 1 GRC =' GEO-WA1-OUT-RETURN-CODE
0920 73T 'REASON CODE =' GEO-WA1-OUT-REASON-CODE /
0930 49T '\***' #OUT-ERROR-MESSAGE-77 /
0940 ELSE
0950 IF GEO-WA1-OUT-RETURN-CODE = '01'
0960 *
0970 ***** REPLACE YOUR OWN WARNING HANDLING ROUTINE HERE *****
0980 *
0990 MOVE GEO-WA1-OUT-ERROR-MESSAGE TO #OUT-ERROR-MESSAGE-77
1000 WRITE NOTITLE
1010 1T #USER-BORO 3T #USER-HSE-NUM 16T #USER-STRT-NAME
1020 49T '*** FUNCTION 1 WARNING, GRC =' GEO-WA1-OUT-RETURN-CODE
1030 82T 'REASON CODE =' GEO-WA1-OUT-REASON-CODE /
1040 49T '\***' #OUT-ERROR-MESSAGE-77
1050 END-IF
1060 END-IF
1070 *
1080 IF GEO-WA1-OUT-RETURN-CODE = '00' OR
1090 GEO-WA1-OUT-RETURN-CODE = '01'
1100 MOVE GEO-WA1-OUT-RETURN-CODE TO #SAVE-RET-CODE
1110 *
1120 ***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR *****
1130 ***** PROCESSING SUCCESSFUL GEOSUPPORT FUNCTION 1 CALL *****
1140 *
1150 ************************************************************************
1160 * THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND *
1170 * ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE *
1180 * FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS *
1190 * FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: *
1200 * (1) INITIALIZE WORKAREA 1 TO SPACES *
1210 * (2) SET WA1'S FUNCTION CODE FIELD TO D *
1220 * (3) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED *
1230 * VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE *
1240 * HAS SPACE FOR ONLY 25 CHARACTERS) *
1250 * (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
1260 * STREET NAMES FORMATTED FOR DISPLAY *
1270 * (5) MOVE WA2'S LOW PBSC FIELD TO WA1'S INPUT STREET CODE 1 FIELD *
1280 * (6) MOVE WA2'S HIGH PBSC FIELD TO WA1'S INPUT STREET CODE 2 FIELD *
1290 * (7) CALL GBI WITH 1 WORKAREA *
1300 * (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
1310 ************************************************************************
1320 RESET GEOLW1
1330 MOVE 'D ' TO GEO-WA1-IN-FUNCTION-CODE
1340 MOVE 'C' TO GEO-WA1-IN-COMPACT-NAME-FLAG
1350 MOVE '25' TO GEO-WA1-IN-SNL
1360 MOVE GEO-WA2-FN1-LOW-PBSC(1) TO GEO-WA1-IN-STREETCODE-1
1370 MOVE GEO-WA2-FN1-HI-PBSC(1) TO GEO-WA1-IN-STREETCODE-2
1380 *
1390 CALL 'GBI' W1NAT
1400 *
1410 IF GEO-WA1-OUT-RETURN-CODE = '00'
1420 MOVE GEO-WA1-OUT-STREET-1 TO #OUT-STREET-1-SNL25
1430 MOVE GEO-WA1-OUT-STREET-2 TO #OUT-STREET-2-SNL25
1440 *
1450 ***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR *****
1460 ***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****
1470 *
1480 IF #SAVE-RET-CODE = '01' RESET #USER-BORO
1490 #USER-HSE-NUM #USER-STRT-NAME
1500 END-IF
1510 WRITE NOTITLE
1520 1T #USER-BORO 3T #USER-HSE-NUM 16T #USER-STRT-NAME
1530 49T GEO-WA2-FN1-ZIP 55T GEO-WA2-FN1-COMDIST-NUM
1540 58T GEO-WA2-FN1-POL-PRECINCT 67T GEO-WA2-FN1-SCHOOLDIST
1550 75T #OUT-STREET-1-SNL25 101T #OUT-STREET-2-SNL25 /
1560 ELSE
1570 *
1580 ***** REPLACE YOUR OWN ERROR HANDLING ROUTINE HERE *****
1590 *
1600 MOVE GEO-WA1-OUT-ERROR-MESSAGE TO #OUT-ERROR-MESSAGE-77
1610 WRITE NOTITLE
1620 1T #USER-BORO 3T #USER-HSE-NUM 16T #USER-STRT-NAME
1630 49T '*** FUNCTION D GRC =' GEO-WA1-OUT-RETURN-CODE
1640 73T 'REASON CODE =' GEO-WA1-OUT-REASON-CODE /
1650 49T '\***' #OUT-ERROR-MESSAGE-77 /
1660 END-IF
1670 END-IF
1680 *
1690 END-SUBROUTINE
1700 END
0010 ************************************************************************
0020 * PGM NAME: GEOBUPGA DATE: 08-18-98 MODIFIED : 08-28-06 *
0030 * *
0040 * THIS PROGRAM MAKES FUNCTION 1 AND D CALLS TO GEOSUPPORT USING *
0050 * BORO, HOUSENUMBER, & STREET NAME SUPPLIED BY AN INSTREAM FILE. *
0060 * FUNCTION 1 RETURNS GEOGRAPHIC INFORMATION FOR AN ADDRESS. *
0070 * FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
0080 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
0090 * NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
0100 * ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET *
0110 * NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 1. *
0120 ************************************************************************
0130 * *
0140 ************************************************************************
0150 * USE OF GEOSUPPORT LDA (REFERENCED BELOW BY THE LOCAL USING STATEMENT)*
0160 * IS STRONGLY ENCOURAGED. *
0170 ************************************************************************
0180 DEFINE DATA
0190 LOCAL USING GEOLP1
0200 LOCAL USING GEOLP2
0210 *
0220 ***** REPLACE CODE BELOW WITH YOUR OWN INPUT FILE DECLARATION *****
0230 LOCAL
0240 01 #USER-INPUT
0250 02 #USER-BORO (A1)
0260 02 #FILLER1 (A1)
0270 02 #USER-HSE-NUM (A12)
0280 02 #FILLER2 (A1)
0290 02 #USER-STRT-NAME (A32)
0300 02 #FILLER3 (A33)
0310 *
0320 01 #SAVE-RET-CODE (A2)
0330 01 #OUT-STREET-1-SNL25 (A25)
0340 01 #OUT-STREET-2-SNL25 (A25)
0350 01 #OUT-ERROR-MESSAGE-77 (A77)
0360 *
0370 01 #B5SC (A6)
0380 01 REDEFINE #B5SC
0390 02 #B5SC-BORO (A1)
0400 02 #B5SC-5SC (A5)
0410 *
0420 END-DEFINE
0430 *
0440 FORMAT LS=133 PS=65
0450 *
0460 ***** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *****
0470 WRITE NOTITLE
0480 1T'SAMPLE NATURAL PROGRAM \#1 EXECUTION OUTPUT'//
0490 1T'*****---------- INPUT ADDRESS ------------*****'
0500 49T'*****--------------------- SELECTED OUTPUT'
0510 92T'ITEMS -----------------------*****'//
0520 1T'B HOUSE NUMBER IN-STREET-NAME ZIP CD'
0530 58T'NYPD-PCT SCHLDST LOW CROSS STREET '
0540 101T'HIGH CROSS STREET '/
0550 1T'- ------------ -------------------------------- ----- --'
0560 58T'-------- ------- -------------------------'
0570 101T'-------------------------'/
0580 *
0590 READ WORK FILE 01 #USER-INPUT 0600 PERFORM FN1-PROCESS
0610 END-WORK
0620 *
0630 DEFINE SUBROUTINE FN1-PROCESS
0640 ************************************************************************
0650 * TO MAKE A FUNCTION 1 CALL: *
0660 * (1) INITIALIZE WORKAREA 1 TO SPACES *
0670 * (2) SET WA1'S FUNCTION CODE FIELD TO 1 *
0680 * (3) SET THE PLATFORM INDICATOR SWITCH (NON-IBM-MAINFRAME) *
0690 * TO USE CHARACTER-ONLY WORK AREA (COWS) *
0700 * (4) MOVE THE INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
0710 * (5) MOVE THE INPUT HOUSE NUMBER TO WA1'S INPUT HOUSE NUMBER FIELD *
0720 * (6) MOVE THE INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
0730 * (7) CALL GBI WITH 2 WORKAREAS *
0740 * (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
0750 ************************************************************************
0760 ************************************************************************
0770 * AS OF GEOSUPPORT 10.1, *
0780 * TO RECEIVE ROADBED-SPECIFIC INFORMATION, *
0790 * SET THE ROADBED REQUEST SWITCH TO 'R', AS FOLLOWS: *
0800 * MOVE 'R' TO PIWA1-IN-ROADBED-REQ-SWITCH. *
0810 ************************************************************************
0820 RESET GEOLP1
0830 MOVE '1 ' TO PIWA1-IN-FUNCTION-CODE
0840 MOVE 'C' TO PIWA1-IN-PLATFORM-INDICATOR
0850 MOVE #USER-BORO TO PIWA1-IN-BORO-1
0860 MOVE #USER-HSE-NUM TO PIWA1-IN-HOUSENUM-DISPLAY
0870 MOVE #USER-STRT-NAME TO PIWA1-IN-STREET-1
0880 *
0890 CALL 'GBI' P1NAT P2NAT
0900 *
0910 IF PIWA1-OUT-RETURN-CODE NOT = '00' AND
0920 PIWA1-OUT-RETURN-CODE NOT = '01'
0930 *
0940 ***** REPLACE YOUR OWN ERROR HANDLING ROUTINE HERE *****
0950 *
0960 MOVE PIWA1-OUT-ERROR-MESSAGE TO #OUT-ERROR-MESSAGE-77
0970 WRITE NOTITLE
0980 1T #USER-BORO 3T #USER-HSE-NUM 16T #USER-STRT-NAME
0990 49T '*** FUNCTION 1 GRC =' PIWA1-OUT-RETURN-CODE
1000 73T 'REASON CODE =' PIWA1-OUT-REASON-CODE /
1010 49T '\***' #OUT-ERROR-MESSAGE-77 /
1020 ELSE
1030 IF PIWA1-OUT-RETURN-CODE = '01'
1040 *
1050 ***** REPLACE YOUR OWN WARNING HANDLING ROUTINE HERE *****
1060 *
1070 MOVE PIWA1-OUT-ERROR-MESSAGE TO #OUT-ERROR-MESSAGE-77
1080 WRITE NOTITLE
1090 1T #USER-BORO 3T #USER-HSE-NUM 16T #USER-STRT-NAME
1100 49T '*** FUNCTION 1 WARNING, GRC =' PIWA1-OUT-RETURN-CODE
1110 82T 'REASON CODE =' PIWA1-OUT-REASON-CODE /
1120 49T '\***' #OUT-ERROR-MESSAGE-77
1130 END-IF
1140 END-IF
1150 *
1160 IF PIWA1-OUT-RETURN-CODE = '00' OR
1170 PIWA1-OUT-RETURN-CODE = '01'
1180 MOVE PIWA1-OUT-RETURN-CODE TO #SAVE-RET-CODE
1190 *
1200 ***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR *****
1210 ***** PROCESSING SUCCESSFUL GEOSUPPORT FUNCTION 1 CALL *****
1220 *
1230 ************************************************************************
1240 * THIS PROGRAM ASSUMES THERE EXISTS AT LEAST ONE HIGH AND *
1250 * ONE LOW CROSS STREET. TO GET THE STREET NAMES OF THE *
1260 * FIRST-LISTED HIGH AND FIRST-LISTED LOW CROSS STREETS *
1270 * FROM THE HIGH AND LOW STREET CODE LISTS CALL FUNCTION D: *
1280 * (1) INITIALIZE WORKAREA 1 TO SPACES *
1290 * (2) SET WA1'S FUNCTION CODE FIELD TO D *
1300 * (3) SET THE PLATFORM INDICATOR SWITCH (NON-IBM-MAINFRAME) *
1310 * TO USE CHARACTER-ONLY WORK AREA (COWS) *
1320 * (4) SET WA1'S STREET NAME LENGTH FIELD TO DESIRED *
1330 * VALUE (IN THIS CASE 25 BECAUSE THE REPORT LINE *
1340 * HAS SPACE FOR ONLY 25 CHARACTERS) *
1350 * (5) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
1360 * STREET NAMES FORMATTED FOR DISPLAY *
1370 * (6) MOVE WA2'S LOW B5SC FIELD TO WA1'S INPUT STREET CODE 1 FIELD *
1380 * (7) MOVE WA2'S HIGH B5SC FIELD TO WA1'S INPUT STREET CODE 2 FIELD *
1390 * (8) CALL GBI WITH 1 WORKAREA *
1400 * (9) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
1410 ************************************************************************
1420 RESET GEOLP1
1430 MOVE 'C' TO PIWA1-IN-PLATFORM-INDICATOR
1440 MOVE 'D ' TO PIWA1-IN-FUNCTION-CODE
1450 MOVE '25' TO PIWA1-IN-SNL
1460 MOVE 'C' TO PIWA1-IN-SN-NORM-FORMAT
1470 MOVE PIWA2-FN1-LOW-B5SC(1) TO #B5SC
1480 MOVE #B5SC-BORO TO PIWA1-IN-BORO-1
1490 MOVE #B5SC-5SC TO PIWA1-IN-10SC-1
1500 MOVE PIWA2-FN1-HI-B5SC(1) TO #B5SC
1510 MOVE #B5SC-BORO TO PIWA1-IN-BORO-2
1520 MOVE #B5SC-5SC TO PIWA1-IN-10SC-2
1530 *
1540 CALL 'GBI' P1NAT
1550 *
1560 IF PIWA1-OUT-RETURN-CODE = '00'
1570 MOVE PIWA1-OUT-STREET-1 TO #OUT-STREET-1-SNL25
1580 MOVE PIWA1-OUT-STREET-2 TO #OUT-STREET-2-SNL25
1590 *
1600 ***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR *****
1610 ***** PROCESSING SUCCESSFUL GEOSUPPORT CALLS *****
1620 *
1630 IF #SAVE-RET-CODE = '01' RESET #USER-BORO
1640 #USER-HSE-NUM #USER-STRT-NAME
1650 END-IF
1660 WRITE NOTITLE
1670 1T #USER-BORO 3T #USER-HSE-NUM 16T #USER-STRT-NAME
1680 49T PIWA2-FN1-ZIP 55T PIWA2-FN1-COM-DIST-NUM
1690 58T PIWA2-FN1-POL-PRECINCT 67T PIWA2-FN1-SCHL-DIST
1700 75T #OUT-STREET-1-SNL25 101T #OUT-STREET-2-SNL25 /
1710 ELSE
1720 *
1730 ***** REPLACE YOUR OWN ERROR HANDLING ROUTINE HERE *****
1740 *
1750 MOVE PIWA1-OUT-ERROR-MESSAGE TO #OUT-ERROR-MESSAGE-77
1760 WRITE NOTITLE
1770 1T #USER-BORO 3T #USER-HSE-NUM 16T #USER-STRT-NAME
1780 49T '*** FUNCTION D GRC =' PIWA1-OUT-RETURN-CODE
1790 73T 'REASON CODE =' PIWA1-OUT-REASON-CODE /
1800 49T '\***' #OUT-ERROR-MESSAGE-77 /
1810 END-IF
1820 END-IF
1830 *
1840 END-SUBROUTINE
1850 END
//GEOBUPG1 JOB YOUR-JOB-CARD-INFORMATION
//*
//**********************************************************************
//*** NATURAL SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#1 ***
//*** MSW FORMAT ***
//**********************************************************************
//S1 EXEC NT3MPM1M,REGION=7000K
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATSETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//NAT.STEPLIB DD
// DD
// DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//SYSPRINT DD SYSOUT=A
//SYSOUT DD SYSOUT=A,DCB=(LRECL=132)
//CMPRINT DD SYSOUT=A,DCB=(LRECL=132)
//CMWKF01 DD *
1,22 ,READE ST
1,500 ,DUANE ST
1,2-4 ,BROADWAY
4,165-100 ,BAISLEY BLVD
4,165-1000 ,BAISLEY BLVD
//CMSYNIN DD *
Your_Application_ID,Your-User_ID
%*
Your-Password
L L GEOLW1 [For COW: GEOLP1]
L L GEOLW2 [For COW: GEOLP2]
L P GEOBUPG1 [For COW Sample: GEOBUPGA]
GEOBUPG1 [For COW Sample: GEOBUPGA}
FIN
//INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, \*//
//* ETC) ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT \*//
//* IS TAILORED TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//SYSUDUMP DD DUMMY
//
*****---------- INPUT ADDRESS ------------***** *****--------------------- SELECTED OUTPUT ITEMS -----------------------*****
B HOUSE NUMBER IN-STREET-NAME ZIP CD NYPD-PCT SCHLDST LOW CROSS STREET HIGH CROSS STREET
\- ------------ -------------------------------- ----- -- -------- ------- ------------------------- -------------------------
1 22 READE ST 10007 01 005 02 ELK STREET BROADWAY
1 500 DUANE ST *** FUNCTION 1 GRC = 42 REASON CODE =
*** ADDRESS NUMBER OUT OF RANGE
1 2-4 BROADWAY *** FUNCTION 1 WARNING, GRC = 01 REASON CODE = 1
*** ADDR NUMBER ALTERED: RANGE ASSUMED. USING DIGITS BEFORE DASH ONLY
10004 01 001 02 STONE STREET BOWLING GREEN
4 165-100 BAISLEY BLVD 11434 12 113 28 GUY R BREWER BOULEVARD BEDELL STREET
4 165-1000 BAISLEY BLVD *** FUNCTION 1 GRC = 13 REASON CODE = 2
*** ADDRESS NBR 165-1000 HAS MORE THAN 3 DIGITS AFTER THE DASH.
NATURAL SAMPLE PROGRAM #2
0010************************************************************************
0020 * PGM NAME: GEOBUPG2 DATE: 08-18-98 *
0030 * *
0040 * THIS PROGRAM MAKES FUNCTION 2 AND D CALLS TO GEOSUPPORT USING TWO *
0050 * BOROS AND TWO STREET NAMES SUPPLIED BY AN INSTREAM FILE. *
0060 * FUNCTION 2 RETURNS GEOGRAPHIC INFORMATION FOR AN INTERSECTION. *
0070 * FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
0080 ************************************************************************
0090 * NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
0100 * ORIGINAL CALL TO FUNCTION 1, ALL THE CROSS STREET *
0110 * NAMES WOULD HAVE BEEN RETURNED BY FUNCTION 1. *
0120 ************************************************************************
0130 *
0140 ************************************************************************
0150 * USE OF GEOSUPPORT LDA (REFERENCED BELOW BY THE LOCAL USING STATEMENT)*
0160 * IS STRONGLY ENCOURAGED. *
0170 ************************************************************************
0180 *
0190 DEFINE DATA
0200 LOCAL USING GEOLW1
0210 LOCAL USING GEOLW2
0220 *
0230 ***** REPLACE CODE BELOW WITH YOUR OWN INPUT DATA DECLARATION *****
0240 *
0250 LOCAL
0260 01 #USER-INPUT
0270 02 #USER-BORO1 (A1)
0280 02 #FILLER1 (A1)
0290 02 #USER-STRT-NAME1 (A32)
0300 02 #FILLER2 (A1)
0310 02 #USER-BORO2 (A1)
0320 02 #FILLER3 (A1)
0330 02 #USER-STRT-NAME2 (A32)
0340 02 #FILLER4 (A11)
0350 *
0360 01 #INDEX (I1)
0370 *
0380 END-DEFINE
0390 *
0400 FORMAT LS=133 PS=65
0410 *
0420 ***** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *****
0430 *
0440 WRITE NOTITLE
0450 1T'SAMPLE NATURAL PROGRAM \#2 EXECUTION OUTPUT'//
0460 1T'*****----------------- INPUT INTERSECTION'
0470 43T'----------------------*****'
0480 71T'*****------------ SELECTED OUTPUT ITEMS -------------*****'//
0490 1T 'B IN-STREET-NAME-1 '
0500 36T'B IN-STREET-NAME-2 '
0510 71T' ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET NAMES'/
0520 1T '- --------------------------------'
0530 36T'- --------------------------------'
0540 71T'----- -- -------- ------- --------------------------------'
0550 *
0560 READ WORK FILE 01 #USER-INPUT
0570 PERFORM FN2-PROCESS
0580 END-WORK
0590 *
0600 DEFINE SUBROUTINE FN2-PROCESS
0610 ************************************************************************
0620 * TO MAKE A FUNCTION 2 CALL: *
0630 * (1) INITIALIZE WORKAREA 1 TO SPACES *
0640 * (2) SET WA1'S FUNCTION-CODE TO 2 *
0650 * (3) MOVE THE 1ST INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
0660 * (4) MOVE THE 1ST INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
0670 * (5) MOVE THE 2ND INPUT BORO TO WA1'S INPUT BORO CODE 2 FIELD *
0680 * (6) MOVE THE 2ND INPUT STREET TO WA1'S INPUT STREET NAME 2 FIELD *
0690 * (7) CALL GBI WITH 2 WORKAREAS *
0700 * (8) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
0710 ************************************************************************
0720 RESET GEOLW1
0730 MOVE '2 ' TO GEO-WA1-IN-FUNCTION-CODE
0740 MOVE #USER-BORO1 TO GEO-WA1-IN-BORO
0750 MOVE #USER-STRT-NAME1 TO GEO-WA1-IN-STREET-1
0760 MOVE #USER-BORO2 TO GEO-WA1-IN-BORO-2
0770 MOVE #USER-STRT-NAME2 TO GEO-WA1-IN-STREET-2
0780 *
0790 CALL 'GBI' W1NAT W2NAT
0800 *
0810 IF GEO-WA1-OUT-RETURN-CODE NOT = '00' AND
0820 GEO-WA1-OUT-RETURN-CODE NOT = '01'
0830 *
0840 ***** REPLACE CODE BELOW WITH YOUR OWN ERROR HANDLING ROUTINE HERE *****
0850 *
0860 WRITE NOTITLE /
0870 1T '***** FUNCTION 2 GRC =' GEO-WA1-OUT-RETURN-CODE
0880 27T 'REASON CODE ='GEO-WA1-OUT-REASON-CODE
0890 43T ','GEO-WA1-OUT-ERROR-MESSAGE /
0900 1T #USER-BORO1 3T #USER-STRT-NAME1
0910 36T #USER-BORO2 38T #USER-STRT-NAME2
0920 ELSE
0930 IF GEO-WA1-OUT-RETURN-CODE = '01'
0940 *
0950 *** REPLACE CODE BELOW WITH YOUR OWN WARNING HANDLING ROUTINE HERE ***
0960 *
0970 WRITE NOTITLE /
0980 1T '***** FUNCTION 2 WARNING, GRC =' GEO-WA1-OUT-RETURN-CODE
0990 37T 'REASON CODE =' GEO-WA1-OUT-REASON-CODE
1000 53T ','GEO-WA1-OUT-ERROR-MESSAGE /
1010 1T #USER-BORO1 3T #USER-STRT-NAME1
1020 36T #USER-BORO2 38T #USER-STRT-NAME2
1030 END-IF
1040 END-IF
1050 *
1060 IF GEO-WA1-OUT-RETURN-CODE = '00' OR
1070 GEO-WA1-OUT-RETURN-CODE = '01'
1080 *
1090 ***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR *****
1100 ***** PROCESSING SUCCESSFUL GEOSUPPORT FUNCTION 2 CALL *****
1110 *
1120 FOR #INDEX 1 TO GEO-WA2-FN2-NUM-OF-INTERSECTS
1130 ***********************************************************************
1140 * TO GET STREET NAMES FOR INTERSECTING STREET CODES *
1150 * MAKE A FUNCTION D CALL: *
1160 * (1) INITIALIZE WORKAREA 1 TO SPACES *
1170 * (2) SET THE WA1'S FUNCTION CODE FIELD TO D *
1180 * (3) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
1190 * STREET NAMES FORMATTED FOR DISPLAY *
1200 * (4) MOVE THE PACKED BORO AND STREET CODE TO *
1210 * WA1'S INPUT STREET CODE 1 FIELD *
1220 * (5) CALL GBI WITH 1 WORKAREA *
1230 * (6) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
1240 ***********************************************************************
1250 RESET GEOLW1
1260 MOVE 'D ' TO GEO-WA1-IN-FUNCTION-CODE
1270 MOVE 'C ' TO GEO-WA1-IN-COMPACT-NAME-FLAG
1280 MOVE '25' TO GEO-WA1-IN-SNL
1290 MOVE GEO-WA2-FN2-INTERSECT-PBSC(#INDEX) TO GEO-WA1-IN-STREETCODE-1
1300 *
1310 CALL 'GBI' W1NAT
1320 *
1330 IF GEO-WA1-OUT-RETURN-CODE = '00'
1340 *
1350 ***** INSERT YOUR OWN CODE HERE FOR *****
1360 ***** PROCESSING SUCCESSFUL FUNCTION D CALLS *****
1370 *
1380 IF #INDEX = 1
1390 WRITE NOTITLE /
1400 1T #USER-BORO1 3T #USER-STRT-NAME1
1410 36T #USER-BORO2 38T #USER-STRT-NAME2
1420 71T GEO-WA2-FN2-ZIP 77T GEO-WA2-FN2-COMDIST-NUM
1430 80T GEO-WA2-FN2-POL-PRECINCT 89T GEO-WA2-FN2-SCHOOLDIST
1440 97T GEO-WA1-OUT-STREET-1
1450 ELSE
1460 WRITE NOTITLE
1470 97T GEO-WA1-OUT-STREET-1
1480 END-IF
1490 ELSE IF GEO-WA1-OUT-RETURN-CODE NOT = '00'
1500 *
1510 ***** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****
1520 *
1530 WRITE NOTITLE /
1540 1T '***** FUNCTION D GRC =' GEO-WA1-OUT-RETURN-CODE
1550 27T 'REASON CODE =' GEO-WA1-OUT-REASON-CODE
1560 43T ','GEO-WA1-OUT-ERROR-MESSAGE /
1570 1T #USER-BORO1 3T #USER-STRT-NAME1
1580 36T #USER-BORO2 38T #USER-STRT-NAME2
1590 END-IF
1600 END-IF
1610 END-FOR
1620 END-IF
1630 *
1640 END-SUBROUTINE
1650 END
0010 ************************************************************************
0020 * PGM NAME: GEOBUPGB DATE: 08-18-98 MODIFIED : 08-28-06 *
0030 * *
0040 * THIS PROGRAM MAKES FUNCTION 2 AND D CALLS TO GEOSUPPORT USING TWO *
0050 * BOROS AND TWO STREET NAMES SUPPLIED BY AN INSTREAM FILE. *
0060 * FUNCTION 2 RETURNS GEOGRAPHIC INFORMATION FOR AN INTERSECTION. *
0070 * FUNCTION D TRANSLATES AN INPUT STREET CODE TO A STREET NAME. *
0080 ************************************************************************
0090 * NOTE: IF THE CROSS STREET NAMES FLAG WERE USED IN THE *
0100 * ORIGINAL CALL TO FUNCTION 2, ALL THE CROSS STREET *
0110 * NAMES WOULD HAVE BEEN REUTRNED BY FUNCTION 2. *
0120 ************************************************************************
0130 * *
0140 ************************************************************************
0150 * USE OF GEOSUPPORT LDA (REFERENCED BELOW BY THE LOCAL USING STATEMENT)*
0160 * IS STRONGLY ENCOURAGED. *
0170 ************************************************************************
0180 *
0190 DEFINE DATA
0200 LOCAL USING GEOLP1
0210 LOCAL USING GEOLP2
0220 *
0230 ***** REPLACE CODE BELOW WITH YOUR OWN INPUT DATA DECLARATION *****
0240 *
0250 LOCAL
0260 01 #USER-INPUT
0270 02 #USER-BORO1 (A1)
0280 02 #FILLER1 (A1)
0290 02 #USER-STRT-NAME1 (A32)
0300 02 #FILLER2 (A1)
0310 02 #USER-BORO2 (A1)
0320 02 #FILLER3 (A1)
0330 02 #USER-STRT-NAME2 (A32)
0340 02 #FILLER4 (A11)
0350 *
0360 01 #INDEX (I1)
0370 *
0380 01 #B5SC (A6)
0390 01 REDEFINE #B5SC
0400 02 #B5SC-BORO (A1)
0410 02 #B5SC-5SC (A5)
0420 *
0430 01 #NUM-INTERSECT-A (A1)
0440 01 REDEFINE #NUM-INTERSECT-A
0450 02 #NUM-INTERSECT-N (N1)
0460 *
0470 END-DEFINE
0480 *
0490 FORMAT LS=133 PS=60
0500 *
0510 ***** REPLACE CODE BELOW WITH YOUR OWN REPORT LAYOUT *****
0520 *
0530 WRITE NOTITLE
0540 1T'SAMPLE NATURAL PROGRAM \#2 EXECUTION OUTPUT'//
0550 1T'*****----------------- INPUT INTERSECTION'
0560 43T'----------------------*****'
0570 71T'*****------------ SELECTED OUTPUT ITEMS -------------*****'//
0580 1T 'B IN-STREET-NAME-1 '
0590 36T'B IN-STREET-NAME-2 '
0600 71T' ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET NAMES'/
0610 1T '- --------------------------------'
0620 36T'- --------------------------------'
0630 71T'----- -- -------- ------- --------------------------------'
0640 *
0650 READ WORK FILE 01 #USER-INPUT
0660 PERFORM FN2-PROCESS
0670 END-WORK
0680 *
0690 DEFINE SUBROUTINE FN2-PROCESS
0700 ************************************************************************
0710 * TO MAKE A FUNCTION 2 CALL: *
0720 * (1) INITIALIZE WORKAREA 1 TO SPACES *
0730 * (2) SET WA1'S FUNCTION-CODE TO 2 *
0740 * (3) SET THE PLATFORM INDICATOR SWITCH (NON-IBM-MAIN-FRAME) *
0750 * TO USE CHARACTER ONLY WORK AREAS (COWS)
0760 * (4) MOVE THE 1ST INPUT BORO TO WA1'S INPUT BORO CODE FIELD *
0770 * (5) MOVE THE 1ST INPUT STREET TO WA1'S INPUT STREET NAME FIELD *
0780 * (6) MOVE THE 2ND INPUT BORO TO WA1'S INPUT BORO CODE 2 FIELD *
0790 * (7) MOVE THE 2ND INPUT STREET TO WA1'S INPUT STREET NAME 2 FIELD *
0800 * (8) CALL GBI WITH 2 WORKAREAS *
0810 * (9) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
0820 ************************************************************************
0830 RESET GEOLP1
0840 MOVE '2 ' TO PIWA1-IN-FUNCTION-CODE
0850 MOVE 'C' TO PIWA1-IN-PLATFORM-INDICATOR
0860 MOVE #USER-BORO1 TO PIWA1-IN-BORO-1
0870 MOVE #USER-STRT-NAME1 TO PIWA1-IN-STREET-1
0880 MOVE #USER-BORO2 TO PIWA1-IN-BORO-2
0890 MOVE #USER-STRT-NAME2 TO PIWA1-IN-STREET-2
0900 *
0910 CALL 'GBI' P1NAT P2NAT
0920 *
0930 IF PIWA1-OUT-RETURN-CODE NOT = '00' AND
0940 PIWA1-OUT-RETURN-CODE NOT = '01'
0950 *
0960 ***** REPLACE CODE BELOW WITH YOUR OWN ERROR HANDLING ROUTINE HERE *****
0970 *
0980 WRITE NOTITLE /
0990 1T '***** FUNCTION 2 GRC =' PIWA1-OUT-RETURN-CODE
1000 27T 'REASON CODE ='PIWA1-OUT-REASON-CODE
1010 43T ','PIWA1-OUT-ERROR-MESSAGE /
1020 1T #USER-BORO1 3T #USER-STRT-NAME1
1030 36T #USER-BORO2 38T #USER-STRT-NAME2
1040 ELSE
1050 IF PIWA1-OUT-RETURN-CODE = '01'
1060 *
1070 *** REPLACE CODE BELOW WITH YOUR OWN WARNING HANDLING ROUTINE HERE ***
1080 *
1090 WRITE NOTITLE /
1100 1T '***** FUNCTION 2 WARNING, GRC =' PIWA1-OUT-RETURN-CODE
1110 37T 'REASON CODE =' PIWA1-OUT-REASON-CODE
1120 53T ','PIWA1-OUT-ERROR-MESSAGE /
1130 1T #USER-BORO1 3T #USER-STRT-NAME1
1140 36T #USER-BORO2 38T #USER-STRT-NAME2
1150 END-IF
1160 END-IF
1170 *
1180 IF PIWA1-OUT-RETURN-CODE = '00' OR
1190 PIWA1-OUT-RETURN-CODE = '01'
1200 *
1210 ***** REPLACE CODE BELOW WITH YOUR OWN CODE FOR *****
1220 ***** PROCESSING SUCCESSFUL GEOSUPPORT FUNCTION 2 CALL *****
1230 *
1240 MOVE PIWA2-FN2-NUM-OF-INTERSECTS TO #NUM-INTERSECT-A
1250 FOR #INDEX 1 TO #NUM-INTERSECT-N
1260 ***********************************************************************
1270 * TO GET STREET NAMES FOR INTERSECTING STREET CODES *
1280 * MAKE A FUNCTION D CALL: *
1290 * (1) INITIALIZE WORKAREA 1 TO SPACES *
1300 * (2) SET THE WA1'S FUNCTION CODE FIELD TO D *
1310 * (3) SET THE PLATFORM INDICATOR SWITCH (NON-IBM-MAIN-FRAME) *
1320 * TO USE CHARACTER ONLY WORK AREAS (COWS) *
1330 * (4) USE THE COMPACT STREET NAMES OPTION TO OBTAIN *
1340 * STREET NAMES FORMATTED FOR DISPLAY *
1350 * (5) MOVE THE PACKED BORO AND STREET CODE TO *
1360 * WA1'S INPUT STREET CODE 1 FIELD *
1370 * (6) CALL GBI WITH 1 WORKAREA *
1380 * (7) CHECK RETURN CODES FOR ERRORS OR WARNINGS *
1390 ***********************************************************************
1400 RESET GEOLP1
1410 MOVE 'D ' TO PIWA1-IN-FUNCTION-CODE
1420 MOVE 'C' TO PIWA1-IN-PLATFORM-INDICATOR
1430 MOVE 'C' TO PIWA1-IN-SN-NORM-FORMAT
1440 * MOVE PIWA2-FN2-INTERSECT-B5SC(#INDEX) TO PIWA1-IN-10SC-1
1450 MOVE PIWA2-FN2-INTERSECT-B5SC(#INDEX) TO #B5SC
1460 MOVE #B5SC-BORO TO PIWA1-IN-BORO-1
1470 MOVE #B5SC-5SC TO PIWA1-IN-10SC-1
1480 *
1490 CALL 'GBI' P1NAT
1500 *
1510 IF PIWA1-OUT-RETURN-CODE = '00'
1520 *
1530 ***** INSERT YOUR OWN CODE HERE FOR *****
1540 ***** PROCESSING SUCCESSFUL FUNCTION D CALLS *****
1550 *
1560 IF #INDEX = 1
1570 WRITE NOTITLE /
1580 1T #USER-BORO1 3T #USER-STRT-NAME1
1590 36T #USER-BORO2 38T #USER-STRT-NAME2
1600 71T PIWA2-FN2-ZIP 77T PIWA2-FN2-COM-DIST-NUM
1610 80T PIWA2-FN2-POL-PRECINCT 89T PIWA2-FN2-SCHL-DIST
1620 97T PIWA1-OUT-STREET-1
1630 ELSE
1640 WRITE NOTITLE
1650 97T PIWA1-OUT-STREET-1
1660 END-IF
1670 ELSE IF PIWA1-OUT-RETURN-CODE NOT = '00'
1680 *
1690 ***** INSERT YOUR OWN ERROR HANDLING ROUTINE HERE *****
1700 *
1710 WRITE NOTITLE /
1720 1T '***** FUNCTION D GRC =' PIWA1-OUT-RETURN-CODE
1730 27T 'REASON CODE =' PIWA1-OUT-REASON-CODE
1740 43T ','PIWA1-OUT-ERROR-MESSAGE /
1750 1T #USER-BORO1 3T #USER-STRT-NAME1
1760 36T #USER-BORO2 38T #USER-STRT-NAME2
1770 END-IF
1780 END-IF
1790 END-FOR
1800 END-IF
1810 *
1820 END-SUBROUTINE
1830 END
//GEOBUPG2 JOB YOUR-JOB-CARD-INFORMATION
//*
//**********************************************************************
//*** NATURAL SAMPLE BATCH GEOSUPPORT USER APPLICATION PROGRAM \#2 ***
//*** MSW FORMAT ***
//**********************************************************************
//S1 EXEC NT3MPM1M,REGION=7000K
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* THE STEPLIB (OR JOBLIB) OF THE GEOSUPPORT EXECUTION STEP \*//
//* MUST INCLUDE THE FOLLOWING TWO CONCATENATED DATSETS: \*//
//* A030.GEO.SUPPORT.PDSE.LOADLIB \*//
//* A030.GEO.SUPPORT.LOADLIB \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//NAT.STEPLIB DD
// DD
// DD DSN=A030.GEO.SUPPORT.PDSE.LOADLIB,DISP=SHR
// DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//SYSPRINT DD SYSOUT=A
//SYSOUT DD SYSOUT=A,DCB=(LRECL=132)
//CMPRINT DD SYSOUT=A,DCB=(LRECL=132)
//CMWKF01 DD *
1,CHAMBERS ST ,1,HUDSON ST
1,SIXTH AV ,1,W. 8 ST
1,DUANE ST ,1,READE ST
//CMSYNIN DD *
Your-Application-ID,Your-User-ID
%*
Your-Password
L L GEOLW1 [For COW: GEOLP1]
L L GEOLW2 [For COW: GEOLP2]
L P GEOBUPG2 [For COW Sample: GEOBUPGB]
GEOBUPG2 [For COW Sample: GEOBUPGB]
FIN
//INCLIB DD DSN=A030.GEO.SUPPORT.LOADLIB,DISP=SHR
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//* \*//
//* AS OF GEOSUPPORT VERSION 10.0, \*//
//* DD STATEMENTS FOR GEOSUPPORT DATA FILES (E.G. GRID, PAD, \*//
//* ETC) ARE NO LONGER NEEDED AND ARE IGNORED. GEOSUPPORT \*//
//* IS TAILORED TO USE STANDARD GEOSUPPORT DATA SET NAMES. \*//
//* TO USE NON-STANDARD FILES, SEE YOUR SYSTEMS PROGRAMMER. \*//
//* \*//
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \*//
//SYSUDUMP DD DUMMY
*****----------------- INPUT INTERSECTION ----------------------***** *****------------ SELECTED OUTPUT ITEMS -------------*****
B IN-STREET-NAME-1 B IN-STREET-NAME-2 ZIP CD NYPD-PCT SCHLDST INTERSECTING STREET NAMES
- -------------------------------- - -------------------------------- ----- -- -------- ------- --------------------------------
1 CHAMBERS ST 1 HUDSON ST 10007 01 001 02 CHAMBERS STREET
HUDSON STREET
WEST BROADWAY
1 SIXTH AV 1 W. 8 ST 10014 02 006 02 6 AVENUE
GREENWICH AVENUE
WEST 8 STREET
***** FUNCTION 2 GRC = 62 REASON CODE = , READE STREET & DUANE STREET DO NOT INTERSECT
1 DUANE ST 1 READE ST