Structuring jBASE to look like traditional R83

Alternatively, you can download this information in Word document format to print.

 

 

Traditional R83

R83 Example

jBASE

MACHINE

The actual hardware

\jbase_data

    SYSTEM FILE

SYSTEM

\jbase_data\SYSTEM

        ACCOUNTS

ORDER-ENTRY

\jbase_data\ORDER-ENTRY

            MD

MD

\jbase_data\ORDER-ENTRY\MD

               DICTFILE

DICT ORDERS

\jbase_data\ORDER-ENTRY\ORDERS]D

                  DATAFILE

ORDERS

\jbase_data\ORDER-ENTRY\ORDERS

USERS

Not implemented

Uses traditional windows users.  Can either be specific for each person or have 1 called jbase that everyone uses.

 

 

 

As you can see, jBASE can be setup to look nearly identical to an existing Traditional R83 system.  The obvious initial bonus is the fact that multiple "MACHINES" or independent databases (jbase_data1,jbase_data2, etc.) can reside on one piece of hardware. 

Windows USERS and how they relate to your migrated jBASE system

The first difference to note is that R83 did not have users and therefore this is a new concept to some who are migrating to jBASE or any windows server based application.  In R83 the "USER" was simply the fact that you sat at a terminal connected to a specific machine.  Probably the easiest way for R83 migrators to look at "USER" is to consider the original login and password to be a virtual A/B switch witch determines which "MACHINE" you will be running. Therefore, there are many ways to set-up the users which could include : 1 user per jbase_data ("MACHINE"), 1 user per application ("MACHINE" and "ACCOUNT"), 1 user for all jBASE and prompt for jbase_data "MACHINE" and "ACCOUNT" or endless other combinations.  For the purpose of this document we will assume we are migrating 1 R83 machine with multiple accounts to 1 jBASE machine and will therefore create individual "USERS" for each "ACCOUNT" as boldfaced above. 

Assumptions used in this document

For the purpose of this document we are assuming the following:

  1. The migration is from R83 to jBASE version 4 for windows

  2. The "ACCOUNT" structure is such that each "ACCOUNT" has a BP and PROC file.

  3. You are familiar with printer setup and sharing in Windows.

  4. You will be restoring from a pseudo-floppy (hard disk image)


jBASE advantages and differences 

PATH for programs and JBCOBJECTLIST for subroutines 

Traditional R83 implementations must either have the program exist in the MD or be referred to by a RUN statement that includes the file and item name.  On jBASE, programs can be located using the MD, but may also be located anywhere else on the system referred to by the PATH and JBCOBJECTLIST environment variables. All programs on jBASE must be CATALOGed.  These programs/subroutines then become verbs on windows that exist somewhere in the PATH.  This concept is different than the traditional R83, but with some up front planning, the advantages are immense.  Programs become immediately available to any user having it in their PATH.  There is no need to CATALOG a utility in all your "ACCOUNT" MDs as was needed in R83.  Simply add your utility programs bin (short for binary) directory to the PATH environment variable for all users. i.e. PATH = C:\jbase_acct\UTILACCT\bin;C:\jbase_acct\AP\bin;C:\jbase_acct\AR\bin;etc...  Some planning needs to be taken into account since these three (3) command lines are synonymous:

MAIN will run the first MAIN program in the PATH
RUN AP MAIN will run the first MAIN program in the PATH

RUN AR MAIN will run the first MAIN program in the PATH

But, with a little upfront design you can migrate any R83 structure and usually take advantage of the PATH/JBCOBJECTLIST environment variables.  That is why they say on jBASE the MD is optional. 

Traditional Q-point, D-point and JEDIFILEPATH 

All files are located using the MD and/or JEDIFILEPATH. In traditional R83 you can access files in the MD that are either D-points or Q-Points.  In jBASE they can be there, but they also can be accessed directly by their native path name i.e. C:\temp or follow a path set in the environment variable JEDIFILEPATH.

Example:

With the environment variable set:
JEDIFILEPATH = .;c:\jbase_data\AR1;c:\jbase_data\AR2;c:\jbase_data\AR3

LIST CUSTOMERS

This would list the first CUSTOMERS it finds.  First checking the MD then subsequently checking the AR1 "ACCOUNT", AR2 "ACCOUNT" and then AR3 "ACCOUNT" by
following the JEDIFILEPATH and this could be accomplished without an MD.  That is why they say on jBASE the MD is optional.  With a little planning you can easily eliminate the need for Q-Points.

Planning your Migration (Things to do on your existing system)

1. What are valid data accounts and what are system and/or old unused accounts 

Account

Convert?

Note

DM

No

System account on old computer

MAINLINK

No

Not used anymore

AP

Yes

 

OE

Yes

 

PR

Yes

Be sure to DX  PR.HIST.OLD

UTIL.ACCT

yes

Various utilities used by all accounts.  Need to elimnate SYSTEM specific utilities.

etc...

 

 

 2. Do you use PATHing for your native system

D3 - Q ^ ACCT,DICTFILE,{DATAFILE}
U2 - F-points, D-Points
Others?? 

Best to convert these to valid Q-Point structure or include them in the JEDIFILEPATH.
Are they Q-POINTS to Q-POINTS?  You will probably want to clean this up. 

3. Do you use the RUN command to execute two or more separate programs with the same name in the same "ACCOUNT"? (See jBASE advantages and differences)
          You will need to rename the programs to have unique names. 

4. Plan your PATH and JBCOBJECTLIST environment variables for each "ACCOUNT"

Account

PATH / JBCOBJECTLIST

Notes

AP - Accounts Payable

.\bin;c:\jbase_data\UTIL\bin

.\lib;c:\jbase_data\UTIL\lib

 

OE - Order Entry

.\bin;c:\jbase_data\PR\bin;c:\jbase_data\UTIL\bin
.\lib;c:\jbase_data\PR\lib;c:\jbase_data\UTIL\lib

Put PR\bin and PR\lib in because of timeclock programs

PR

.\bin;c:\jbase_data\UTIL\bin
.\lib;c:\jbase_data\UTIL\lib

 

UTIL

.\bin
.\lib

 

etc...

 

 

5. Do you have source code for all your programs.
          Best to recompile on your existing platform and be sure all programs compile. 

6. Be sure all programs compile.  Don't want to chase your tail on converted programs and find out they didn't compile on the machine you migrated from.

Executing your Migration 

1. Download and install jBASE 4.1 from our website          http://www.jbase.com/products/Rel4download_info.html  

2. RUN C:\download directory\jbase4_4.1.4.2_win32.exe 

3. Create the "MACHINE"

MKDIR C:\jbase_data or use the windows explorer and "New Folder" and name it jbase_data

4. Change the HOME variable for your console user to reflect the new "MACHINE".

Start >> Settings >> Control Panel >> System >> [Advanced] >> [Environment Variables...]

Highlight HOME and click EDIT or if it doesn't exist add NEW and make Variable Value C:\jbase_data

5. Change the JEDIFILENAME_SYSTEM variable for your console user to reflect the new "SYSTEM".

Start >> Settings >> Control Panel >> System >> [Advanced] >> [Environment Variables...]

click NEW and add JEDIFILENAME_SYSTEM with Variable Value C:\jbase_data\SYSTEM 

6. Run jsh (jBASE Shell) from the jBASE program group in windows and check that HOME is correct

          jsh Username ~ -->pwd <Enter>
          C:\jbase_data
  
       jsh Username ~ --> 

7. Create the SYSTEM[1] file to be used on your new "MACHINE"

          jsh Username ~ -->CREATE-FILE DICT SYSTEM 29
          [ 417 ] File SYSTEM]D created , type = J4

8. Attach the tape drive (see TAPE section for details)

          In this example we are restoring a pseudo-tape from a D3 machine
          T-ATT FLOPPY0 DEVICE=C:\temp\pflop1 label=R83,500 

9. Restore the accounts from the filesave tape attached

          sysrestore -C
          Enter home directory of restored account or account name : <Enter>
          sysrestore -C
          sysrestore -C 

10. Check that all your "ACCOUNTS" are on your "MACHINE"

          LIST . # "SYSTEM]"

11. Create the SYSTEM item for your "ACCOUNTS".

          jsh Username ~ -->MAKE.SYSTEM[2]<Enter>
         <Enter> = C:\jbase_data, EX = exit
          Database path where accounts are located. : <Enter>

nn accounts to process  (where nn should be the number of accounts   you restored)
Continue? (Y/N) : Y <Enter>

12. Run UpdateMD

          LOGTO "ACCOUNT"
          CREATE-FILE MD.ORIG 3 7
          COPY MD
          TO:(MD.ORIG
          UpdateMD 

13. Convert programs and compile them

COPY BP

            TO: (BP.ORIG

            PortBas BP (KOVS

            BASIC BP *

            CATALOG BP *   

14. Create a windows user for the "ACCOUNT"
          Right Click on My Computer > Manage > Local Users and Groups
          Right Click on Users > New User...

Put in User Name ("ACCOUNT") and Password and Confirm Password.  You may want to uncheck "User must change password at logon" which will allow you to check any of the other password pertinent boxes. Click Create then Close.

Double click on the new user in the right pane and you can add the user to groups and you must click on the Profile tab and put a the account PATH ("C:\jbase_data\"ACCOUNT") under Home Folder

15. Convert the windows "USER" to a jBASE user

          IJU<Enter>
          take the defaults
          Do you wish to use the jsh [Y/N] : Y <Enter>
          Do you wish to start up your Login proc automatically [Y/N] : Y<Enter>

16. EDIT . REMOTE.CMD and add LOGTO "ACCOUNT"

          Add this line to end the line before "%JBCRELEASEDIR%\bin\jsh -s jsh -"
          LOGTO "ACCOUNT"

17. REPEAT steps 12-16 for all accounts.

18. Setup spooler and printers

          SP-NEWTAB 

          SP-CREATE F1 NT -d\\server\printer
          SP-CREATE F2 NT -d\\server\printer
          etc...

MAKE.SYSTEM source code

    MAKE.SYSTEM

001    PROMPT ''
002    JEDIFILENAME.SYSTEM=GETENV('JEDIFILENAME_SYSTEM')
003    OPEN '',JEDIFILENAME.SYSTEM TO F.SYSTEM ELSE
004       CRT 'Cannot access ':JEDIFILENAME.SYSTEM
005       STOP
006    END
007    LAST.SLASH = COUNT(JEDIFILENAME.SYSTEM,'\')
008    DATABASE.PATH = OCONV(JEDIFILENAME.SYSTEM,'G0\':LAST.SLASH)
009 *
010 *** Prompt for database PATH
011 *
012    CRT
013    CRT '<Enter> = ':DATABASE.PATH:', EX = exit'
014    CRT 'Database path where accounts are located. : ':
015    INPUT DB.PATH
016    IF DB.PATH = '' THEN DB.PATH = DATABASE.PATH
017    IF DB.PATH = 'EX' THEN STOP
018 *
019 *** select items in PATH that are potential Accounts
020 *
021    EXECUTE 'SSELECT ':DB.PATH:' # "SYSTEM""SYSTEM]D"' CAPTURING OP
022    R.SYSTEM = 'D'
023    ACCTS = '' ; ACCT.CNT = 0
024    DONE = 0
025    LOOP
026    UNTIL DONE DO
027       READNEXT ACCT THEN
028          ACCT.PATH = DB.PATH:'\':ACCT
029          ACCTMD = ACCT.PATH:'\MD'
030          OPEN '',ACCTMD TO ACCTMD THEN
031             READ R.EXISTS FROM F.SYSTEM,ACCT ELSE
032                ACCT.CNT = ACCT.CNT + 1
033                ACCTS<ACCT.CNT> = ACCT
034             END
035          END
036       END ELSE
037          DONE = 1
038       END
039    REPEAT
040    CRT
041    CRT ACCT.CNT:' accounts to be processed'
042    YORN = ''
043    LOOP
044    UNTIL YORN = 'Y' OR YORN = 'N' DO
045       CRT 'Continue? (Y/N) : ':
046       INPUT YORN
047    REPEAT
048    IF YORN = 'N' THEN STOP
049 *
050 *** Assign common values to R.SYSTEM
051 *
052    R.SYSTEM = 'D'
053    R.SYSTEM<20> = 'ESYSTEM_START'
054    R.SYSTEM<21> = 'JBASE'          ;* JBCEMULATE
055    R.SYSTEM<22> = ''               ;* HOME
056    R.SYSTEM<23> = ''               ;* JBCDEV_BIN
057    R.SYSTEM<24> = ''               ;* JBCDEV_LIB
058    R.SYSTEM<25> = ''               ;* PATH
059    R.SYSTEM<26> = ''               ;* JBCOBJECTLIST
060    R.SYSTEM<27> = ''               ;* JEDIFILEPATH
061    R.SYSTEM<28> = ''               ;* JEDIFILENAME_MD
062    R.SYSTEM<29> = ''               ;* JBC_TCLRESTART
063    R.SYSTEM<30> = ''               ;* JBC_ENDRESTART
064    R.SYSTEM<31> = ''               ;* JBCRESTARTPROG
065    R.SYSTEM<32> = ''               ;* JBCLOGINPROG
066    R.SYSTEM<33> = ''               ;* JBCLOGNAME
067    R.SYSTEM<34> = 'false'          ;* JBASE_I18N (INTERNATIONAL MODE)
068    R.SYSTEM<35> = '1':@VM:'999999' ;* JBCPORTNO (MULTI-VALUE RANGE)
069    R.SYSTEM<36> = ''               ;* OTHER ENVIRONMENT VARIABLES (MV)
070    R.SYSTEM<37> = 'ESYSTEM_END'
071 *
072 *** Create SYSTEM items for ACCTS
073 *
074    FOR ACNT = 1 TO ACCT.CNT
075       ACCT = ACCTS<ACNT>
076       READ R.EXISTS FROM F.SYSTEM,ACCT THEN
077          CRT ACCT:' skipped.  Already exists'
078       END ELSE
079 *
080 *** Assign specific values to R.SYSTEM for this ACCT
081 *
082          R.SYSTEM<2> = DB.PATH:'\':ACCT
083          R.SYSTEM<22> = DB.PATH:'\':ACCT
084          R.SYSTEM<23> = DB.PATH:'\':ACCT:'\bin'
085          R.SYSTEM<24> = DB.PATH:'\':ACCT:'\lib'
086          R.SYSTEM<25> = DB.PATH:'\':ACCT:'\bin'
087          R.SYSTEM<26> = DB.PATH:'\':ACCT:'\lib'
088          R.SYSTEM<27> = DB.PATH:'\':ACCT
089          R.SYSTEM<28> = DB.PATH:'\':ACCT:'\MD]D'
090 *
091 ***
092 *
093          WRITE R.SYSTEM ON F.SYSTEM,ACCT
094       END
095   NEXT ACNT


[1] The "SYSTEM" file is simply a map to where the "ACCOUNT" is on the hard drive.  In its simplest form it contains a D on line 1 and the path on line 2.  This file is therefore not as critical as it was on R83 and can easily be reproduced. 

[2] This utility is a part of the jBASE shared software library and is not supported by jBASE.  Source code is available at http://www.jbase.com and is included as an appendix to this document.

 

 
Author: Dan Ell, jBASE International
March 2004

 

 
 
 
Copyright ® 2008 jBASE International. All rights reserved.
Trademarks & Copyrights