|
Here's the complete source. It works on my V5R1 machine. Fnfiled CF E WORKSTN F SFILE(SFL01:RRN) F SFILE(SFL02:RRN2) F SFILE(SFL03:RRN3) F INFDS(WDSUBF) Fffd001PF IF F 120 DISK USROPN FFFD002PF IF F 86 DISK USROPN Fnfilep O E PRINTER USROPN ,**************************************************************** D SpacePtr S * D HeaderPtr S * D DBRPtr S * ,** D Userspace DS BASED(Spaceptr) D Data 1 DIM(32767) D OffsetHdr 117 120B 0 D OffsetDBR 125 128B 0 D NumLstEnt 133 136B 0 D EntrySize 137 140B 0 ,** D Header DS BASED(HeaderPtr) D FileName 10 D LibName 10 D FileType 10 D RcdFmtName 10 D RecLength 9B 0 D RecFmtID 13 D RecTxtD 50 D Reserved1 1 D RTDesCCDID 9B 0 D VLFFmtID 1 D GrphFID 1 D DatTimFID 1 D NullCapFID 1 ,** D List DS D FldName 10 D DataType 1 D Use 1 D OutBuffPos 9B 0 D InBuffPos 9B 0 D FldLength 9B 0 D Digits 9B 0 D DecPos 9B 0 D FldTextD 50 D EditCode 2 D EditWordL 9B 0 D EditWord 64 D ColHdg1 20 D ColHdg2 20 D ColHdg3 20 D IntFldName 10 D AltFldName 30 D AltFldNL 9B 0 D #DBCSChars 9B 0 D NullAllow 1 D VarFldInd 1 D DatTimFmt 4 D DatTimSep 1 D VarLFLDInd 1 D FTDCCSID 9B 0 D FDCCSID 9B 0 D FCHCCSID 9B 0 D FEWCCSID 9B 0 D New1 9B 0 D New2 9B 0 D New3 9B 0 D New4 9B 0 D New5 9B 0 D New6 128 D New7 10 D New8 1 D New9 1 D New10 1 D New11 1 D New12 1 D New13 1 ,** D DBRFormat DS BASED(DBRPtr) D DBFName 10 D DBLName 10 D DBDFName 10 D DBDLName 10 D DBDType 1 D Reserved2 3 D DBJoinRef# 9B 0 D DBCNmLen 9B 0 D DBCCName 258 D DBCLib 10 ,** D WDSUBF DS D W$KEY 369 369 D SFLPG# 378 379B 0 ,** D @enter C CONST(X'F1') D @f3 C CONST(X'33') D @f5 C CONST(X'35') D @f6 C CONST(X'36') D @f7 C CONST(X'37') D @f8 C CONST(X'38') D @f9 C CONST(X'39') D @f10 C CONST(X'3A') D @f12 C CONST(X'3C') D @f13 C CONST(X'B1') D @f14 C CONST(X'B2') D @f15 C CONST(X'B3') D @f17 C CONST(X'B5') D @f18 C CONST(X'B6') D @f24 C CONST(X'BC') ,** D LstSpcName C CONST('FFD001US QTEMP ') D DBRSpcName C CONST('FFD002US QTEMP ') D KeySize C CONST(99) ,** D Up C 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' D Low C 'abcdefghijklmnopqrstuvwxyz' ,** D SpaceName S 20 D SpaceAtr S 10 D SpaceSiz S 9B 0 INZ(32767) D SpaceStart S 9B 0 D DataSize S 9B 0 INZ(%size(List)) D SpaceInv S 1 D SpaceAut S 10 INZ('*ALL') D SpaceDes S 50 INZ('User Space For LSTFFD') D FmtName S 8 INZ('FLDL0100') ,** D Keys S 10 DIM(KeySize) D Pos S 2 DIM(KeySize) ,** D WPQFName S 20 D WPMember S 10 INZ('*FIRST') D WPOverRide S 1 INZ('0') D WPError S 9B 0 ,** D SFld S Like(WWFLD) D SDsc S Like(WWDSC) D Text1 S Like(WWDSC) D Text2 S Like(WWDSC) ,** D Desc2 S Like(WFDESC) ,** D QCmdCmd S 256 D QCmdLength S 15 5 INZ(256) D LibFile S 20 D RRN S 4 0 D RRN2 S 4 0 D RRN3 S 4 0 D #Fields S 4 0 D #Triggers S 4 0 D i S 4 0 D j S 4 0 D ssStart S 4 0 D Decimals S 2 0 D OvrCnt S 2 0 INZ(1) D FirstSrch S 1 INZ('Y') ,**************************************************************** IFFD001PF NS I 63 63 APUNIQ I 69 78 APBOF I 79 88 APBOL I 101 110 APKEYF I P 115 116 0APKEYN IFFD002PF NS I 62 62 TRTRTM I 63 63 TRTREV I 64 64 TRTRCN I 65 74 TRTRIG I 75 84 TRTRLB ,**************************************************************** c If WpPrint = '*YES' C EXSR $PRINT c Eval *InLr = *On c Return c EndIf ,** C EXSR $DISPLAY ,** C SETON LR ,**************************************************************** ,**Display the Subfile * ,**************************************************************** C $DISPLAY BEGSR ,** C dow (W$KEY <> @f3) ,** C select C when (OvrCnt = 1) C WRITE OVR01 C when (OvrCnt = 2) C WRITE OVR02 C other C WRITE OVR01 C endsl ,** C EXFMT CTL01 C eval RECNBR = SFLPG# C eval WSMSG = ' ' ,** C select C when (W$KEY = @f5) C EXSR $SEARCH C when (W$KEY = @f6) C EXSR $PRINT C when (W$KEY = @f7) C EXSR $SEARCHFLD C when (W$KEY = @f8) C EXSR $SEARCHDSC C when (W$KEY = @f9) C EXSR $DSPDBR C when (W$KEY = @f10) C EXSR $TRIGGERS C when (W$KEY = @f13) or (W$KEY = @f14) C EXSR $QUERY C when (W$KEY = @f15) C EXSR $DSPSRC C when (W$KEY = @f17) C eval RECNBR = 1 C when (W$KEY = @f18) C eval RECNBR = #Fields C when (W$KEY = @f24) C eval OvrCnt = (OvrCnt + 1) ,** C if (OvrCnt > 2) C eval OvrCnt = 1 C endif ,** C endsl ,** C enddo ,** C ENDSR ,**************************************************************** ,**Display Datebase Realations Window * ,**************************************************************** C $DSPDBR BEGSR c Eval FileLib = WpFile + WpLib c Call 'EXPDBR' c Parm FileLib 20 c Parm '*' Display 6 ,** C*******************EXFMT CTL02 ,** C if (*IN41) C EXSR $PROCES2 C endif ,** C ENDSR ,**************************************************************** ,**List Triggers For The File * ,**************************************************************** C $TRIGGERS BEGSR ,** C dow (W$KEY <> @f3) and (W$KEY <> @f12) C WRITE OVR03 C EXFMT CTL03 ,** C if (W$KEY = @f6) C EXSR $PRINTTRG C endif ,** C enddo ,** C ENDSR ,**************************************************************** ,**Print The File Field Descriptions * ,**************************************************************** C $PRINT BEGSR ,** C OPEN nfilep C WRITE HDG C WRITE FILEHDG ,** C 1 do #Fields i C i CHAIN SFL01 99 ,** C if (not *IN99) ,** C if (*INOF) C WRITE HDG C WRITE FILEHDG C endif ,** C WRITE FILEDET OF C endif ,** C enddo ,** C CLOSE nfilep C eval WSMSG = 'File has been printed.' ,** C ENDSR ,**************************************************************** ,**Print The File Trigger Information * ,**************************************************************** C $PRINTTRG BEGSR ,** C OPEN nfilep C WRITE HDG C WRITE TRIGHDG ,** C 1 do #Triggers i C i CHAIN SFL03 99 ,** C if (not *IN99) ,** C if (*INOF) C WRITE HDG C WRITE TRIGHDG C endif ,** C WRITE TRIGDET OF C endif ,** C enddo ,** C CLOSE nfilep ,** C ENDSR ,**************************************************************** ,**Display Data with Query * ,**************************************************************** C $QUERY BEGSR ,** C eval LibFile = %trim(WSLIB) + '/' + WSFILE C eval QCmdCmd = 'RUNQRY *NONE ' + LibFile ,** C if (W$KEY = @f14) C eval QCmdCmd = %trim(QCmdCmd) + ' RCDSLT(*YES)' C endif ,** C CALL 'QCMDEXC' 99 C PARM QCmdCmd C PARM QCmdLength ,** C if (*IN99) C eval WSMSG = 'Error running query command.' C endif ,** C ENDSR ,**************************************************************** ,**Display Source * ,**************************************************************** C $DSPSRC BEGSR ,** C eval LibFile = %trim(WSLIB) + '/' + WSFILE C eval QCmdCmd = 'BRWOBJSRC OBJ(' + LibFile + C ') OBJTYPE(*FILE)' ,** C CALL 'QCMDEXC' 99 C PARM QCmdCmd C PARM QCmdLength ,** C if (*IN99) C eval WSMSG = 'BRWOBJSRC command not found.' C endif ,** C ENDSR ,**************************************************************** ,**Search By Field * ,**************************************************************** C $SEARCHFLD BEGSR ,** C eval WWFLD = ' ' C eval WWDSC = ' ' ,** C dow (W$KEY <> @f12) C EXFMT WIN01 ,** C if (W$KEY = @f12) C eval SFld = ' ' C ITER C endif ,** C if (WWFLD <> ' ') C Low:Up XLATE WWFLD SFld C EXSR $SEARCH C eval SFld = ' ' C LEAVE C endif ,** C enddo ,** C ENDSR ,**************************************************************** ,**Search By Description * ,**************************************************************** C $SEARCHDSC BEGSR ,** C eval WWFLD = ' ' C eval WWDSC = ' ' ,** C dow (W$KEY <> @f12) C EXFMT WIN02 ,** C if (W$KEY = @f12) C eval SDsc = ' ' C ITER C endif ,** C if (WWDSC <> ' ') C Low:Up XLATE WWDSC SDsc C EXSR $SEARCH C eval SDsc = ' ' C LEAVE C endif ,** C enddo ,** C ENDSR ,**************************************************************** ,**Process Subfile For Search * ,**************************************************************** C $SEARCH BEGSR ,** C eval FirstSrch = 'Y' ,** C 1 do #Fields i C i CHAIN SFL01 99 ,** C if (not *IN99) ,** C if (W$KEY <> @f5) ,** C select C when (SFld <> ' ') C eval Text1 = SFld C Low:Up XLATE WFFLDN Text2 C when (SDsc <> ' ') C eval Text1 = SDsc C Low:Up XLATE WFDESC2 Text2 C endsl ,** C ' ' CHECKR Text1 j 99 ,** C if (not *IN99) C eval j = %size(Text1) C endif ,** C Text1:j SCAN Text2 68 ,** C if (*IN68) and (FirstSrch = 'Y') C eval RECNBR = RRN C eval FirstSrch = 'N' C endif ,** C else C eval *IN68 = *OFF C endif ,** C UPDATE SFL01 C endif ,** C enddo ,** C if (W$KEY <> @f5) ,** C if (FirstSrch = 'Y') C eval WSMSG = 'No matches found.' C else C eval WSMSG = 'Matched records highlighted. ' + C 'Press F5 to clear.' C endif ,** C else C eval WSMSG = 'Fields cleared.' C endif ,** C ENDSR ,**************************************************************** ,**Initialize The Subfiles * ,**************************************************************** C $INIT BEGSR ,** C eval RRN = 0 C MOVEA '0010' *IN(31) C WRITE CTL01 C MOVEA '0100' *IN(31) ,** C eval RRN2 = 0 C MOVEA '0010' *IN(41) C WRITE CTL02 C MOVEA '0100' *IN(41) ,** C eval RRN3 = 0 C MOVEA '0010' *IN(51) C WRITE CTL03 C MOVEA '0100' *IN(51) ,** C ENDSR ,**************************************************************** ,**Load the Field Description Subfile * ,**************************************************************** C $LOAD1 BEGSR ,** C eval HeaderPtr = (%addr(Data(OffSetHdr + 1))) C eval WSFILE = FileName C eval WSLIB = LibName C eval WSDESC = RecTxtD C eval WSRCDF = RcdFmtName C eval WSTYPE = FileType C eval *IN88 = (FileType <> 'PF') C eval SpaceStart = 513 ,** C do NumLstEnt C EXSR $RTVUSAPI C EXSR $DESC1 C eval WFFLDT = DataType C eval WFSTART = OutBuffPos C eval WFDESC2 = FldTextD ,** C if (WFFLDT = 'P') or (WFFLDT = 'B') C eval WFLENGTH = Digits C else C eval WFLENGTH = FldLength C endif ,** C if (WFFLDT <> 'B') and (WFFLDT <> 'D') and C (WFFLDT <> 'F') and (WFFLDT <> 'G') and C (WFFLDT <> 'H') and (WFFLDT <> 'M') and C (WFFLDT <> 'N') and (WFFLDT <> 'P') and C (WFFLDT <> 'S') and (WFFLDT <> 'Y') C eval WFDEC = ' ' C else C eval Decimals = DecPos C Move Decimals WFDEC C endif ,** C eval WFFLDN = FldName C eval i = 1 C FldName lookup Keys(i) 99 ,** C if (*IN99) C eval WFKEY = ('K' + Pos(i)) C else C eval WFKEY = ' ' C endif ,** C eval *IN50 = (WFKEY <> ' ') C eval RRN = (RRN + 1) C WRITE SFL01 C EXSR $DESC2 C eval SpaceStart = (SpaceStart + DataSize) C enddo ,** C eval #Fields = RRN C eval *IN34 = *ON C eval *IN31 = (RRN > 0) C eval RECNBR = 1 ,** C ENDSR ,**************************************************************** ,**Fill Description 1 * ,**************************************************************** C $DESC1 BEGSR ,** C eval j = %size(FldTextD) ,** C dow (j > 0) ,** C if (%subst(FldTextD:j:1) = ' ') and C (j <= %size(WFDESC)) C LEAVE C endif ,** C eval j = (j - 1) C enddo ,** C eval WFDESC = %subst(FldTextD:1:j) C eval ssStart = (j + 1) C eval Desc2 = %subst(FldTextD:ssStart) ,** C ENDSR ,**************************************************************** ,**Fill Description 2 * ,**************************************************************** C $DESC2 BEGSR ,** C if (Desc2 <> ' ') C eval WFFLDN = ' ' C eval WFKEY = ' ' C eval WFFLDT = ' ' C eval WFSTART = 0 C eval WFLENGTH = 0 C eval WFDEC = ' ' C eval WFDESC = Desc2 C eval WFDESC2 = ' ' C eval RRN = (RRN + 1) C WRITE SFL01 C endif ,** C ENDSR ,**************************************************************** ,**Load the Database Relations Subfile * ,**************************************************************** C $LOAD2 BEGSR ,** C do NumLstEnt C eval DBRPtr = (%addr(Data(OffSetDBR + 1))) C eval OffSetDBR = (OffSetDBR + EntrySize) ,** C eval WFDBFILE = DBDFName C eval WFDBLIB = DBDLName ,** C select C when (DBDType = 'D') C eval WFDBTYPE = 'DATA' C when (DBDType = 'I') C eval WFDBTYPE = 'ACCESS PATH' C when (DBDType = 'O') C eval WFDBTYPE = 'ACC PATH OWNER' C when (DBDType = 'V') C eval WFDBTYPE = 'SQL' C other ,** C if (WFDBFILE <> '*NONE') C eval WFDBTYPE = '???' C endif ,** C endsl ,** C eval *IN66 = (WFDBTYPE <> 'DATA') C eval RRN2 = (RRN2 + 1) C WRITE SFL02 C enddo ,** C eval *IN44 = *ON C eval *IN41 = (RRN2 > 0) C eval RECNBR2 = 1 ,** C ENDSR ,**************************************************************** ,**Load the Trigger Information * ,**************************************************************** C $LOAD3 BEGSR ,** C OPEN FFD002PF C READ FFD002PF 69 ,** C dow (not *IN69) C eval WFPRGLIB = (%trim(TRTRIG) + '/' + C %trim(TRTRLB)) ,** C select C when (TRTRTM = 'B') C eval WFTRTM = 'BEFORE' C when (TRTRTM = 'A') C eval WFTRTM = 'AFTER' C other C eval WFTRTM = '??? ' C endsl ,** C select C when (TRTREV = 'I') C eval WFTREV = 'INSERT' C when (TRTREV = 'D') C eval WFTREV = 'DELETE' C when (TRTREV = 'U') C eval WFTREV = 'UPDATE' C other C eval WFTREV = '???' C endsl ,** C select C when (TRTRCN = 'A') C eval WFTRCN = 'ALWAYS' C OTHER C eval WFTRCN = 'CHANGE' C endsl ,** C eval RRN3 = (RRN3 + 1) C WRITE SFL03 C READ FFD002PF 69 C enddo ,** C CLOSE FFD002PF ,** C if (RRN3 <= 0) C eval WFPRGLIB = 'No Triggers' C eval RRN3 = (RRN3 + 1) C WRITE SFL03 C endif ,** C eval #Triggers = RRN3 C eval *IN54 = *ON C eval *IN51 = (RRN3 > 0) C eval RECNBR3 = 1 ,** C ENDSR ,**************************************************************** ,**Process Subfile 2 * ,**************************************************************** C $PROCES2 BEGSR ,** C READC SFL02 69 ,** C dow (not *IN69) ,** C if (WFWOPT = '1') C eval QCmdCmd = 'LSTFFD FILE(' + C %trim(WFDBLIB) + '/' + C %trim(WFDBFILE) + ')' C CALL 'QCMDEXC' 99 C PARM QCmdCmd C PARM QCmdLength ,** C if (*IN99) C eval WSMSG = 'Error running LSTFFD command.' C endif ,** C endif ,** C eval WFWOPT = ' ' C UPDATE SFL02 C READC SFL02 69 C enddo ,** C ENDSR ,************************************************************** ,**Call List Fields API * ,************************************************************** C $LFLDAPI BEGSR ,** C CALL 'QUSLFLD' C PARM SpaceName C PARM 'FLDL0100' FmtName C PARM WPQFName C PARM WPRFName C PARM WPOverride C PARM WPError ,** C ENDSR ,************************************************************** ,**Call Display Database Relations API * ,************************************************************** C $LDBRAPI BEGSR ,** C CALL 'QDBLDBR' C PARM SpaceName C PARM 'DBRL0100' FmtName C PARM WPQFName C PARM WPMember C PARM WPRFName C PARM WPError ,** C endsr ,************************************************************** ,**Create User Space * ,************************************************************** C $CRTUSAPI BEGSR ,** C CALL 'QUSCRTUS' C PARM SpaceName C PARM SpaceAtr C PARM SpaceSiz C PARM SpaceInv C PARM SpaceAut C PARM SpaceDes ,** C ENDSR ,************************************************************** ,**Retrieve Pointer To User Space * ,************************************************************** C $PTRUSAPI BEGSR ,** C CALL 'QUSPTRUS' C PARM SpaceName C PARM SpacePtr ,** C ENDSR ,************************************************************** ,**Retrieve User Space Data * ,************************************************************** C $RTVUSAPI BEGSR ,** C CALL 'QUSRTVUS' C PARM SpaceName C PARM SpaceStart C PARM DataSize C PARM List ,** C ENDSR ,************************************************************** ,**Delete User Space * ,************************************************************** C $DLTUSAPI BEGSR ,** C CALL 'QUSDLTUS' C PARM SpaceName C PARM WPError ,** C ENDSR ,*************************************************************** ,**Load Array With Key Fields * ,*************************************************************** C $GETKEYS BEGSR ,** C OPEN FFD001PF C eval i = 0 C READ FFD001PF 69 ,** C dow (not *IN69) C eval i = (i + 1) C eval Keys(i) = APKEYF C MOVE APKEYN Pos(i) C READ FFD001PF 69 C enddo ,** C CLOSE FFD001PF ,** C if (APUNIQ <> ' ') C eval WSUNIQ = APUNIQ C else C eval WSUNIQ = 'N' C endif ,** C if (APBOF <> ' ') or (APBOL <> ' ') C eval WSBOF = APBOF C eval WSBOL = APBOL C eval *IN67 = *ON C endif ,** C ENDSR ,*************************************************************** ,**INITIALIZATION SUBROUTINE * ,*************************************************************** C *INZSR BEGSR ,** C *ENTRY PLIST C PARM WPFile 10 C PARM WPLib 10 C PARM WPRFName 10 c Parm WpPrint 4 ,** C eval WPQFName = (WPFile + WPLib) C EXSR $GETKEYS ,** C eval SpaceName = LstSpcName C exsr $CRTUSAPI C EXSR $LFLDAPI C EXSR $PTRUSAPI C EXSR $INIT C EXSR $LOAD1 C EXSR $DLTUSAPI ,** C eval SpaceName = DBRSpcName C EXSR $CRTUSAPI C EXSR $LDBRAPI C EXSR $PTRUSAPI C EXSR $LOAD2 C EXSR $DLTUSAPI ,** C if (not *IN88) C EXSR $LOAD3 C endif ,** C ENDSR Art Tostaine, Jr. CCA, Inc. Jackson, NJ 08527 -----Original Message----- From: midrange-l-bounces@xxxxxxxxxxxx [mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of Art Tostaine, Jr. Sent: Tuesday, August 12, 2003 4:34 PM To: 'Midrange Systems Technical Discussion' Subject: RE: DSPRCDFMT from News/400? Mine is much different.......... D List DS D FldName 10 D DataType 1 D Use 1 D OutBuffPos 9B 0 D InBuffPos 9B 0 D FldLength 9B 0 D Digits 9B 0 D DecPos 9B 0 D FldTextD 50 D EditCode 2 D EditWordL 9B 0 D EditWord 64 D ColHdg1 20 D ColHdg2 20 D ColHdg3 20 D IntFldName 10 D AltFldName 30 D AltFldNL 9B 0 Art Tostaine, Jr. CCA, Inc. Jackson, NJ 08527 -----Original Message----- From: midrange-l-bounces@xxxxxxxxxxxx [mailto:midrange-l-bounces@xxxxxxxxxxxx] On Behalf Of MWalter@xxxxxxxxxxxxxxx Sent: Tuesday, August 12, 2003 3:57 PM To: Midrange Systems Technical Discussion Subject: RE: DSPRCDFMT from News/400? _______________________________________________ This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing list To post a message email: MIDRANGE-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/midrange-l or email: MIDRANGE-L-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/midrange-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.