Brief: If your PCs are linked to an AS/400 through PC Support/400 (or Client Access/400), here's a no-nonsense utility that provides file version control.
Many AS/400 installations use PCs connected to the AS/400 to process PC files. For example, most word processing is done on PCs. More often than not, there's a need to share and control these files among the PC users. Numerous PC-based software solutions provide excellent version control for documents and other files. But most of these packages are only available through a local area network (LAN). Yet many AS/400 installations either don't have a LAN or are hesitant to invest in extensive file-management software.
Some of these LANless installations use a "SneakerNet" (a network of users walking around with diskettes) to share files. This system is not only inefficient, it offers little in the way of control.
With the utility presented here, there's no need to wait for a LAN and no need to handle diskettes. You can start sharing and controlling your documents with two simple PC commands: Check Out (CKO) and Check In (CKI).
To run this utility, PCs must be configured for Extended DOS. The router, shared folders, and data queue function must be active.
What the Utility Does
This application allows a PC file to be checked out of a shared folder and protects it from modification by all users except the one who checked it out. Here the utility is used for document control. However, it could be used for any PC files that need to be shared (e.g., spreadsheets).
The utility creates a copy of the file for editing and places it in a target folder. The utility also creates an archive copy of the file in a special folder so that you have a copy of the file as it existed when it was checked out. This copy is marked as read-only.
The application provides a check-in facility which replaces the original file with the copy from the target folder and makes this replaced version available to other users for update.
1 provides an overview of how the system works. Notice in the example that checking out the ILE.DOC file creates a copy of the file in the target folder RICHARD and at the same time creates a copy in a folder in the ARCHIVE directory. Any editing of the document is done on the copy in the RICHARD folder.
Figure 1 provides an overview of how the system works. Notice in the example that checking out the ILE.DOC file creates a copy of the file in the target folder RICHARD and at the same time creates a copy in a folder in the ARCHIVE directory. Any editing of the document is done on the copy in the RICHARD folder.
A folder by the name of ARCHIVE is automatically created within the folder from which a document is checked out, if it doesn't already exist.
Another folder with the same name as the document being checked out is created within the ARCHIVE folder. It is this folder that will contain the archived copies of the file. The utility uses a version control number to create a special name for the archive copy. Each time the document is checked out, the version control number changes.
Only the person who checked out the file can check it in. However, there is a way to override this if necessary. (See the accompanying sidebar for a description of this technique.)
How to Use It
The best way to use this utility is to assign an administrator to control all checking in and out of documents. This provides centralized control and allows you to secure the folder containing your documents to only one or a few users instead of every user who may need the document. (You can use the Work with Folder (WRKFLR) command to secure folders.)
To check out a file use the CKO PC command as follows:
CKO drive:source-pathfile drive: arget-path
The CKO command requires two parameters. The source-pathfile parameter specifies the document file you want to check out. The target-path parameter specifies the destination folder for the copy of the document. Both parameters must include the drive designator and the full path designation. If you use an administrator to control file check out, the administrator should make sure that the file is checked out to a folder with enough authority to allow users access to the file.
Documents checked out to a folder should be copied to a PC drive before they're edited. Working with the document from a PC drive provides much faster response time than working with it from a folder. For example, administrator Janet checks out a file to folder RICHARD and notifies Richard that the document is available to him. Richard then copies the file from his folder to his PC's C: drive. After he completes editing Richard copies the file back to his folder and notifies Janet that the document is ready to be checked in. To check in a document, use the CKI PC command as follows:
CKI drive:checked-out-pathfile
The checked-out-pathfile parameter is required. It specifies the name of the file you want to check in. The parameter must include the drive designator, the full path designation of the folder, and the document name. The drive:checked- out-pathfile must match the file and the path to which the document was checked out, otherwise a message will appear stating that the file isn't checked out. For example, if you check out ILE.DOC to the RICHARD folder, you must check in the revised document from the RICHARD folder. The CKO PC and CKI PC commands are all that is required to run the application. If you use Microsoft Windows, you could create macros using the Windows Recorder to automate the commands. For example, you could create a separate macro for each user. Then, from the File Manager, you could simply select a file and run the macro.
How it Works
Three important components make this utility possible: the PC Support Check File (CHKFIL) command, the PC Support data queue function, and the PC Support Remote Command (RMTCMD) command.
The CHKFIL command does most of the work. It actually checks the file out and makes the copy to the target folder. It also checks the file in and replaces the checked-out file with the copy from the target folder.
Data queue support provides access to a common data queue between the AS/400 and the PC. Data and commands are passed through this data queue by the PC and the AS/400.
The RMTCMD command allows a PC program to execute an AS/400 command. If you're a programmer and you're interested in more detail on how this utility works, read the remainder of this section.
The CKO.BAT and CKI.BAT programs (see Figures 2 and 3) work essentially the same way. In fact they could be combined into one program with some conditional processing based on a parameter value. However, to keep things simpler two programs are used here.
The batch programs begin by starting the AS/400 REXX procedure F001RX (see 5) using the RMTCMD command. F001RX creates data queue DQNDQ, if it doesn't already exist, and creates a unique name. The unique name is created by taking the first four characters of the file that is being checked out and appending a unique four-digit sequence number to it. The sequence number used is the last four digits of the job number of the communications job that is evoked when the RMTCMD command is run. Every RMTCMD command generates a different communications job, so the job number should always be different.
The batch programs begin by starting the AS/400 REXX procedure F001RX (see Figure 5) using the RMTCMD command. F001RX creates data queue DQNDQ, if it doesn't already exist, and creates a unique name. The unique name is created by taking the first four characters of the file that is being checked out and appending a unique four-digit sequence number to it. The sequence number used is the last four digits of the job number of the communications job that is evoked when the RMTCMD command is run. Every RMTCMD command generates a different communications job, so the job number should always be different.
The unique name is passed to the PC program through the DQNDQ data queue embedded in a PC SET command. The PC program retrieves the command through the Receive Data Queue (RCVDTAQ) command and redirects it to a file. The file is then executed and an environment variable called NAME is set to the unique name.
This unique data queue name is important since each session must be sure to not process commands belonging to another session.
With a unique name now available, the PC program starts the F002RX procedure (see 6). F002RX first performs some editing of the parameters. If the parameters are specified correctly, F002RX then calls program F001RG (see 7) to maintain the CKOFILES file (see 4). F002RX then constructs the required PC commands. Basically, it builds either a CHKFIL OUT or CHKFIL IN command. However, with the check out process (CKO.BAT) several supplemental commands are required.
With a unique name now available, the PC program starts the F002RX procedure (see Figure 6). F002RX first performs some editing of the parameters. If the parameters are specified correctly, F002RX then calls program F001RG (see Figure 7) to maintain the CKOFILES file (see Figure 4). F002RX then constructs the required PC commands. Basically, it builds either a CHKFIL OUT or CHKFIL IN command. However, with the check out process (CKO.BAT) several supplemental commands are required.
Before a file can be checked out, one or two folders linked to the target folder may need to be created. The first one is the ARCHIVE folder. This special folder never contains files-it only contains other folders, one for each document checked out (see 1). The second one is the folder within ARCHIVE that is to contain the archived files for a given document. To create these folders, F002RX sends Make Directory (MD) PC commands to the PC.
Before a file can be checked out, one or two folders linked to the target folder may need to be created. The first one is the ARCHIVE folder. This special folder never contains files-it only contains other folders, one for each document checked out (see Figure 1). The second one is the folder within ARCHIVE that is to contain the archived files for a given document. To create these folders, F002RX sends Make Directory (MD) PC commands to the PC.
After the MD commands are sent, the CHKFIL OUT command is sent followed by a COPY and ATTRIB command. The COPY command is used to create the archive copy of the file. The ATTRIB command marks the archive copy of the file as read-only.
After F002RX is complete, all required commands are in the unique named data queue. The PC program retrieves the commands from the data queue and directs them to batch file RUNPCCMD.BAT. When RUNPCCMD executes, it in turn executes the commands generated by F001RX. The file is checked out or in.
The last thing the PC programs do is delete the unique data queue and clear the NAME environment variable.
Limitations and Recommendations
The maximum length of the source-pathfile or target-path for the CKO command and the checked-out-pathfile for the CKI command is 54 characters, including the drive designator.
The CKI.BAT program requires you to check a file in from the folder to which it was checked out. However it won't prevent someone from using the PC Support CHKFIL command directly to check in a file or replace it with a file from another folder. If you use an administrator to control document check out, you might want to consider securing your document folders on the AS/400.
Keeping a list of the files that are checked out and the folders to which they are checked out could be very useful. The information for such a list is available in the CKOFILES file. If you want this list, just use one of your query tools or write a simple program to display or print the file.
No Need to Wait
You can eliminate the "SneakerNet" and you don't have to wait for a LAN to give your users the ability to share and control their PC documents. Just use the CKO and CKI commands and exploit the resources you already have in PC Support. You'll gain some control, save time and your tennis shoes will probably last a lot longer.
Richard Shaler is a senior technical editor for Midrange Computing.
References PC Support/400 DOS Installation and Administration Guide (SC41-0006, CD-ROM QBKA6302). PC Support/400 OS/2 Installation and Administration Guide (SC41-0007, CD-ROM QBKA6802). REXX/400 Programmer's Guide (SC24-5553, CD-ROM QBKA4B02). REXX/400 Reference (SC24-5552, CD-ROM QBKA4C02).
The document control system presented here allows a PC file to be checked out to a user, making it unavailable for modification to all users except the user who checked it out. While a file is checked out, it is available to other users for reading.
At the time a file is checked out, the system creates two copies of the file: a copy in a user specified target folder and a copy in a folder within a special archive folder (see 1). The archive copy is marked as read-only.
At the time a file is checked out, the system creates two copies of the file: a copy in a user specified target folder and a copy in a folder within a special archive folder (see Figure 1). The archive copy is marked as read-only.
When a file is checked back in, the system replaces the original file with the copy from the user specified folder. The file is no longer read-only and is available to any user with authority to the folder.
This application uses the following components.
CKO.BAT: PC batch program that checks out a PC file. It requires two parameters-the source folder path and filename, and the target folder path.
CKI.BAT: PC batch program that checks in a checked-out file. It requires one parameter-the folder path and filename to be checked in.
RMTCMD.EXE: A PC Support command that submits AS/400 commands.
DQNDQ: Data queue used to send a unique data queue name from the AS/400 to the PC.
Data Queue: (Contrived name) Temporary data queue used to send PC commands from the AS/400 to the PC.
F001RX: REXX procedure that creates the DQNDQ data queue if necessary, creates a unique name, and sends the name to the PC through the DQNDQ data queue. Uses no parameters.
F002RX: REXX procedure that creates a uniquely named data queue and sends required PC commands to the PC through the data queue. It accepts three parameters-the source folder path/file to be checked out, the target folder to receive a copy of the file passed in parameter one, and a data queue name.
F001RG: RPG program used to maintain the checked out files (CKOFILES) database file.
CKOFILES: Physical file that contains a record for each checked out file.
The following illustration shows the interaction and relationship of the components. o Create the PC batch programs CKO.BAT (2) and CKI.BAT (3) on the PCs that will use the utility.
The following illustration shows the interaction and relationship of the components. o Create the PC batch programs CKO.BAT (Figure 2) and CKI.BAT (Figures 3) on the PCs that will use the utility.
o Create source physical file CHKFUTLSRC in library QGPL.
o Create the REXX procedure source members F001RX (5) and F002RX (6) in source file QGPL CHKFUTLSRC.
o Create the REXX procedure source members F001RX (Figure 5) and F002RX (Figure 6) in source file QGPL CHKFUTLSRC.
o Create source members CKOFILES (4) and F001RG (7) on the AS/400 and compile according to the instructions in the source member.
o Create source members CKOFILES (Figure 4) and F001RG (Figure 7) on the AS/400 and compile according to the instructions in the source member.
A document checked out by the PC Support or Client Access CHKFIL command can only be checked in by the user who checked it out. If the user that checked out the document is unavailable, you may not be able check the document in. Fortunately, the status of documents within shared folders can be controlled from the AS/400. If for whatever reason you can't get a document checked in, use the Edit Document Library Object Authority (EDTDLOAUT) command on the AS/400. EDTDLOAUT presents a panel from which you can release the document by placing a 'Y' in the "Release checked out document" prompt. You can then replace the document with the copy that was made at check out time.
Be aware that if you don't replace the document with the copy made at check out time, any changes made to the document will not be made to the master copy.
Control Files in Shared Folders
Figure 1 Shared Folder Document Control System Overview
UNABLE TO REPRODUCE GRAPHICS
Control Files in Shared Folders
Figure 2 PC Batch Program CKO.BAT
::===================================================================== :: CKO.BAT: Check out a file @echo off IF "%1" == "" GOTO PTHFILEREQ IF "%2" == "" GOTO PTHREQ IF NOT EXIST %1 GOTO NOFILE ECHO. ECHO Checking out file %1, one moment please. ::==================================================================== :: Get data queue name to be used for this session C:PCSRMTCMD "STRREXPRC F001RX SRCFILE(QGPL/CHKFUTLSRC) PARM('%1')" /Z > NUL C:PCSRCVDTAQ DQNDQ /L=QGPL /W=0 /Z > C:PCSRUNPCCMD.BAT CALL C:PCSRUNPCCMD ::==================================================================== ::==================================================================== :: Get PC commands from data queue and execute C:PCSRMTCMD "STRREXPRC F002RX SRCFILE(QGPL/CHKFUTLSRC) PARM('%1 %2 %NAME%')" /Z > NUL C:PCSRCVDTAQ %NAME% /L=QGPL /Z > C:PCSRUNPCCMD.BAT CALL C:PCSRUNPCCMD ::==================================================================== GOTO ENDPGM ::==================================================================== :: Error processing :PTHFILEREQ ECHO. ECHO Parameter one must contain a folder pathfilename. GOTO ENDERROR :PTHREQ ECHO. ECHO Parameter two must contain a folder path. GOTO ENDERROR :NOFILE ECHO. ECHO File %1 doesn't exist. GOTO ENDERROR :ENDERROR PAUSE ::==================================================================== :ENDPGM ::==================================================================== :: Clean up C:PCSDLTDTAQ %NAME% /L=QGPL /Z > NUL SET NAME= ::====================================================================
Control Files in Shared Folders
Figure 3 PC Batch Program CKI.BAT
::==================================================================== :: CKI.BAT: Check in a file @echo off IF "%1" == "" GOTO FILEREQ IF NOT EXIST %1 GOTO NOFILE ECHO. ECHO Checking in file %1, one moment please ::==================================================================== :: Get unique name value C:PCSRMTCMD "STRREXPRC F001RX SRCFILE(QGPL/CHKFUTLSRC) PARM('%1')" /Z > NUL C:PCSRCVDTAQ DQNDQ /L=QGPL /W=0 /Z > C:PCSRUNPCCMD.BAT CALL C:PCSRUNPCCMD ::==================================================================== ::==================================================================== :: Get PC commands and check in file C:PCSRMTCMD "STRREXPRC F002RX SRCFILE(QGPL/CHKFUTLSRC) PARM('%1 "IN" %NAME%')" /Z > NUL C:PCSRCVDTAQ %NAME% /L=QGPL /Z > C:PCSRUNPCCMD.BAT CALL C:PCSRUNPCCMD :===================================================================== GOTO ENDPGM ::==================================================================== :: Error processing :FILEREQ ECHO. ECHO Parameter one must contain path/filename. GOTO ENDERROR :NOFILE ECHO. ECHO File %1 doesn't exist. GOTO ENDERROR :ENDERROR PAUSE ::==================================================================== :ENDPGM ::==================================================================== :: Clean up C:PCSDLTDTAQ %NAME% /L=QGPL /Z > NUL SET NAME= ::====================================================================
Control Files in Shared Folders
Figure 4 Physical File CKOFILES DDS
*=============================================================== * CKOFILES * * To compile: * * CRTPF FILE(QGPL/CKOFILES) SRCFILE(QGPL/CHKFUTLSRC) * * Used by MC Check File Utility. * Stores path/file information for checked out files. *=============================================================== *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 A UNIQUE A R CKREC A CKOPTF 54 TEXT('Check out path/file') A CKIPTF 54 TEXT('Check in path/file') A CKDATE 8S 0 TEXT('Date') A CKTIME 6S 0 TEXT('Time') A K CKOPTF *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
Control Files in Shared Folders
Figure 5 REXX Procedure F001RX
/*==================================================================*/ /* F001RX */ /* */ /* No compile required */ /* */ /* Create unique data queue name and send it data queue &DQN. */ /* Parm 1: Folder pathfile. */ /* File name and job number of job that executes this */ /* procedure are used to generate data queue name. */ /*==================================================================*/ parse arg pathfile abbnamelen = 4 seqnbrlen = 4 dqn = 'DQNDQ' dqlib = 'QGPL' "CRTDTAQ DTAQ(&DQLIB/&DQN) MAXLEN(17) TEXT('Created by", "MC Check File Utility')" if RC = 0 then NOP "RTVJOBA NBR(&JOBNBR)" file = translate(substr(pathfile,lastpos('',pathfile)+1)) parse var file abbname '.' ext wrkfile = substr(abbname,1,abbnamelen,'X') trnjobnbr = substr(jobnbr,3,seqnbrlen) dqnm = translate(wrkfile || trnjobnbr) setcmd = strip('SET NAME=' || dqnm,'t') dtalen = '00017F'X "CALL PGM(QSNDDTAQ) PARM(&DQN &DQLIB &DTALEN &SETCMD)"
Control Files in Shared Folders
Figure 6 REXX Procedure F002RX
/*==================================================================*/ /* F002RX */ /* */ /* No compile required */ /* */ /* Send PC commands via data queue to check file out or in. */ /* Parm 1: Folder pathfile to be checked out/in. */ /* Parm 2: Folder path to which file is to be copied. */ /* Parm 3: Data Queue name to be used to send PC commands. */ /*==================================================================*/ parse arg frpthf topth dqnm error = ' ' archdir = 'ARCHIVE' dqlib = 'QGPL' dtalen = '00127F'X dqmsglen = 127 pathlen = 54 abbnamelen = 4 seqnbrlen = 4 frpthf = translate(frpthf) topth = translate(topth) file = substr(frpthf,lastpos('',frpthf)+1) topthf = strip(topth || '' || file,'t') parse var file abbname '.' ext wrkfile = substr(abbname,1,abbnamelen,'X') frpth = strip(substr(frpthf,1,lastpos('',frpthf)-1),'t') toflr = strip(substr(topth,lastpos('',topth)+1),'t') "DLTDTAQ DTAQ(&DQLIB/&DQNM)" if RC = 'CPF2105' then NOP "CRTDTAQ DTAQ(&DQLIB/&DQNM) MAXLEN(&DQMSGLEN) ", "TEXT('Created by MC Check File Utility')" call edit_parms if error = ' ' then do if topth = 'IN' then call check_in else call check_out end if error = ' ' then do "CALL PGM(QSNDDTAQ) PARM(&DQNM &DQLIB &DTALEN &DQMSG)" dqmsg = 'PAUSE' dqmsg = substr(dqmsg,1,dqmsglen,' ') "CALL PGM(QSNDDTAQ) PARM(&DQNM &DQLIB &DTALEN &DQMSG)" end return /*==================================================================*/ edit_parms: if substr(frpthf,2,1) = ':' then do error = 'Y' dqmsg = '@ECHO Invalid drive designator in parameter one.' dqmsg = substr(dqmsg,1,dqmsglen,' ') end if error = ' ' & substr(frpthf,3,1) = '' then do error = 'Y' dqmsg = '@ECHO Invalid path in parameter one.' dqmsg = substr(dqmsg,1,dqmsglen,' ') end if error = ' ' & topth = 'IN' then do if substr(topth,2,1) = ':' then do error = 'Y' dqmsg = '@ECHO Invalid drive designator in parameter two.' dqmsg = substr(dqmsg,1,dqmsglen,' ') end if error = ' ' & substr(topth,3,1) = '' then do error = 'Y' dqmsg = '@ECHO Invalid path in parameter two.' dqmsg = substr(dqmsg,1,dqmsglen,' ') end if error = ' ' & topth = frpth then do error = 'Y' dqmsg = '@ECHO Target path cannot be the same as source path.' dqmsg = substr(dqmsg,1,dqmsglen,' ') end if error = ' ' then do parse var topth drive '' aspath aspath = translate(aspath,'/','') if pos('',aspath) > 0 then do aspath = strip(substr(aspath,1,lastpos('/',aspath)-1),'t') end if toflr = aspath then aspath = '*NONE' trnjobnbr = substr(dqnm,5,seqnbrlen) archfile = translate(wrkfile || trnjobnbr || '.' || ext) /* Does target folder exist? */ "CHKDLO DLO(&TOFLR) FLR(&ASPATH)" if RC = 0 then do error = 'Y' dqmsg = '@ECHO Folder' topth 'not found' dqmsg = substr(dqmsg,1,dqmsglen,' ') end end end return /*==================================================================*/ check_in: frpthf = substr(frpthf,1,pathlen,' ') topathfile = substr(topathfile,1,pathlen,' ') "CALL PGM(F001RG) PARM(I &FRPTHF &TOPATHFILE &ERROR)" file = strip(file,'t') if error = 'NOTCHKDO' then do dqmsg = '@ECHO File' file 'not checked out' dqmsg = substr(dqmsg,1,dqmsglen,' ') end else do frpthf = strip(frpthf,'t') topathfile = strip(topathfile,'t') dqmsg = 'CHKFIL IN' frpthf topathfile dqmsg = substr(dqmsg,1,dqmsglen,' ') "CALL PGM(QSNDDTAQ) PARM(&DQNM &DQLIB &DTALEN &DQMSG)" end return /*==================================================================*/ check_out: frpthf = substr(frpthf,1,pathlen,' ') topthf = substr(topthf,1,pathlen,' ') "CALL PGM(F001RG) PARM(O &FRPTHF &TOPTHF &ERROR)" file = strip(file,'t') if error = 'CHKDOUT' then do dqmsg = '@ECHO File' file 'already checked out' dqmsg = substr(dqmsg,1,dqmsglen,' ') end else do parse var frpthf drive '' aspath aspath = translate(aspath,'/','') if pos('/',aspath) > 0 then do aspath = strip(substr(aspath,1,lastpos('/',aspath)-1),'t') end "CHKDLO DLO(&ARCHDIR) FLR(&ASPATH)" if RC = 'CPF8A82' | RC = 'CPF8A77' then do dqmsg = 'MD' frpth || '' || archdir dqmsg = substr(dqmsg,1,dqmsglen,' ') "CALL PGM(QSNDDTAQ) PARM(&DQNM &DQLIB &DTALEN &DQMSG)" end aspath = aspath || '/' || archdir "CHKDLO DLO(&FILE) FLR(&ASPATH)" if RC = 'CPF8A82' | RC = 'CPF8A77' then do dqmsg = 'MD' frpth || '' || archdir || '' || file dqmsg = substr(dqmsg,1,dqmsglen,' ') "CALL PGM(QSNDDTAQ) PARM(&DQNM &DQLIB &DTALEN &DQMSG)" end dqmsg = 'CHKFIL OUT' strip(frpthf,'t'), strip(topth,'t') dqmsg = substr(dqmsg,1,dqmsglen,' ') "CALL PGM(QSNDDTAQ) PARM(&DQNM &DQLIB &DTALEN &DQMSG)" dqmsg = 'COPY' strip(frpthf,'t') strip(frpth,'t') || '' || archdir, || '' || strip(file,'t') || '' ||archfile dqmsg = substr(dqmsg,1,dqmsglen,' ') "CALL PGM(QSNDDTAQ) PARM(&DQNM &DQLIB &DTALEN &DQMSG)" dqmsg = 'ATTRIB +R' strip(frpth,'t') || '' || archdir, || '' || strip(file,'t') || '' || archfile dqmsg = substr(dqmsg,1,dqmsglen,' ') "CALL PGM(QSNDDTAQ) PARM(&DQNM &DQLIB &DTALEN &DQMSG)" end return
Control Files in Shared Folders
Figure 7 RPG Progarm F001RG
*=============================================================== * F001RG * * To compile: * * CRTRPGPGM PGM(QGPL/F001RG) SRCFILE(QGPL/CHKFUTLSRC) * * Used by MC Check File Utility. * Maintains the Check Out Files (CKOFILES) file. *=============================================================== *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 FCKOFILESUF E K DISK A I DS I 1 140TIMDTE I 1 60TIM I 7 140DTE * C *ENTRY PLIST C PARM CFTYPE 1 C PARM FRPTF 54 C PARM TOPTF 54 C PARM ERROR 8 * Check file out C CFTYPE IFEQ 'O' C TOPTF CHAINCKOFILES 50 C *IN50 IFEQ *OFF C MOVE 'CHKDOUT 'ERROR C ELSE C TIME TIMDTE C MOVELDTE CKDATE C MOVELTIM CKTIME C MOVELTOPTF CKOPTF C MOVELFRPTF CKIPTF C WRITECKREC C ENDIF C ENDIF * Check file in C CFTYPE IFEQ 'I' C FRPTF CHAINCKOFILES 50 C *IN50 IFEQ *ON C MOVEL'NOTCHKDO'ERROR C ELSE C MOVELCKIPTF TOPTF C DELETCKREC C ENDIF C ENDIF * C MOVEL*ON *INLR *. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
LATEST COMMENTS
MC Press Online