home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / ME494-3.ZIP / SRC / 400_500.SRC next >
Encoding:
Text File  |  1990-04-25  |  35.3 KB  |  1,348 lines

  1. {******************************************************************************
  2.                                                 MULTI-EDIT MACRO FILE 400_500
  3.  
  4. Description:  Contains macros to convert the users initialization and setup
  5.                             from version 4.00 to be compatible with version 5.0.
  6.  
  7.                              (C) Copyright 1989 by American Cybernetics, Inc.
  8. ******************************************************************************}
  9.  
  10. $MACRO 400_500 DUMP;
  11. {******************************************************************************
  12.                                                                 MULTI-EDIT MACRO
  13.  
  14. Name:    400_500
  15.  
  16. Description:  The main conversion macro.
  17.  
  18.                              (C) Copyright 1989 by American Cybernetics, Inc.
  19. ******************************************************************************}
  20. {
  21. We might consider creating a special status window for this conversion and
  22. put messages there so the user can browse through it and determine if
  23. everything went o.K.
  24. }
  25. {
  26. we should have the user create a new directory for 5.0 and keep 4.0 directory
  27. the user would be prompted for the old directory, and would get the neccesary
  28. stuff from there
  29. }
  30.     Def_Int(Active_Window,Data_Window,Window1,Window2,Window3,T_File_Search_Attr,
  31.                     T_Int);
  32.     Def_Str(T_User_Id[3],400_Path[80],T_File_Search_Rec[64]);
  33.  
  34.     Refresh := False;
  35.     T_File_Search_Attr := File_Search_Attr;
  36.     File_Search_Attr := $20;
  37.     T_File_Search_Rec := File_Search_Rec;
  38.     T_User_Id := User_Id;
  39.     Active_Window := Window_Id;
  40.     Create_Window;
  41.     Window1 := Window_Id;
  42.     Create_Window;
  43.     Window2 := Window_Id;
  44.     Create_Window;
  45.     Window3 := Window_Id;
  46.     Create_Window;
  47.     Data_Window := Window_Id;
  48.  
  49.     Load_File(ME_Path + '400_500.DAT');
  50.     IF (Error_Level) THEN
  51.         Return_Str := '/T=CONVERSION ERROR/M=The file 400_500.DAT not found in ' + ME_Path;
  52.         Goto EXIT;
  53.     END;
  54.  
  55. PATH_PROMPT:
  56.     Return_Str := '';
  57.     RM('userin^QUERYBOX /C=3/W=60/ML=80/T=Input path to 4.00 files or <ESC> to abort conversion/F2=Dir   /L=3');
  58.     IF (Return_Int = 0) THEN
  59.         Return_Str := '/T=CONVERSION TERMINATED/M=4.0 to 5.0 conversion terminated by user.';
  60.         Goto EXIT;
  61.     END;
  62.     IF (Copy(Return_Str,Length(Return_Str),1) <> '\') THEN
  63.         Return_Str := Return_Str + '\';
  64.     END;
  65.     IF (File_Exists(Return_Str + '*.*') = 0) THEN
  66.         RM('MEERROR^MESSAGEBOX /B=1/T=ERROR/M=Path not found or directory empty.');
  67.         Goto PATH_PROMPT;
  68.     END;
  69.     400_Path := Return_Str;
  70.     IF (Fexpand(400_Path) = Me_Path) THEN
  71.         RM('MEERROR^MESSAGEBOX /B=1/T=ERROR/M=Version 4.0 files MUST be in a separate directory than the 5.0 files.');
  72.         Goto PATH_PROMPT;
  73.     END;
  74.     IF (File_Exists(400_Path + 'INIT.SRC') = 0) THEN
  75.         Return_Str := '/T=CONVERSION ERROR/M=No INIT.SRC found in ' + 400_Path;
  76.         Goto EXIT;
  77.     END;
  78.     IF (File_Exists(400_Path + 'KEYMAP.ME') = 0) THEN
  79.         Return_Str := '/T=CONVERSION ERROR/M=No KEYMAP.ME found in ' + 400_Path;
  80.         Goto EXIT;
  81.     END;
  82.  
  83.     First_File(400_Path + '*.ME');
  84.  
  85. KEYMAP_LOOP:
  86.  
  87.     T_Int := XPOS('KEYMA',Last_File_Name,1);
  88.     IF (T_Int > 0) THEN
  89.         User_Id := Copy(Last_File_Name,1,T_Int - 1);
  90. {Convert KEYMAP.ME}
  91.         IF (Switch_Win_Id(Window1)) THEN
  92.             Load_File(400_Path + User_Id + 'KEYMAP.ME');
  93.             IF (Error_Level) THEN
  94.                 Return_Str := '/T=CONVERSION ERROR/M=FILE: ' + 400_Path + User_Id + 'KEYMAP.ME NOT FOUND';
  95.                 Goto EXIT;
  96.             END;
  97.         END;
  98.         IF (Switch_Win_Id(Window2)) THEN
  99.             Erase_Window;
  100.             IF (User_Id = '') THEN
  101.                 File_Name := Me_Path + 'KEYMAP.DB';
  102.             ELSE
  103.                 Return_Str := '';
  104.                 RM('MAKEUSERPATH');
  105.                 IF (Error_Level) THEN
  106.                     Return_Str := '/T=CONVERSION ERROR/M=Unable to create user directory ' + ME_Path + User_Id + '.USR';
  107.                     Goto EXIT;
  108.                 END;
  109.                 File_Name := Me_Path + User_Id + '.USR\KEYMAP.DB';
  110.             END;
  111.         END;
  112.         RM('400_500^KEY_DB /MW=' + Str(Window1) + '/DW=' + Str(Window2) +
  113.                 '/DAW=' + Str(Data_Window));
  114.         IF (Return_Str <> '') THEN
  115.             Goto EXIT;
  116.         END;
  117.         Switch_Win_Id(Window2);
  118.         RM('400_500^CHECK_KEYMAP /DW=' + Str(Data_WIndow));
  119.  
  120.         IF (Switch_Win_Id(Window2)) THEN
  121.             Save_File;
  122.             IF (Error_Level) THEN
  123.                 Return_Str := '/T=CONVERSION ERROR/M=ERROR IN SAVING FILE: ' + File_Name + '.';
  124.                 Goto EXIT;
  125.             END;
  126.         END;
  127.  
  128.     END;
  129.     IF (Next_File = 0) THEN
  130.         Goto KEYMAP_LOOP;
  131.     END;
  132.  
  133.     First_File(400_Path + '*.SRC');
  134.  
  135. USER_LOOP:
  136.  
  137.     T_Int := XPOS('INIT',Last_File_Name,1);
  138.     IF (T_Int) THEN
  139.         User_Id := Copy(Last_File_Name,1,T_Int - 1);
  140. {Convert INIT.SRC}
  141.         IF (Switch_Win_Id(Window1)) THEN
  142.             Load_File(400_Path + User_Id + 'INIT.SRC');
  143.             IF (Error_Level) THEN
  144.                 Return_Str := '/T=CONVERSION ERROR/M=FILE: ' + 400_Path + User_Id + 'INIT.SRC NOT FOUND';
  145.                 Goto EXIT;
  146.             END;
  147.         END;
  148.         IF (Switch_Win_Id(Window2)) THEN
  149.             Erase_Window;
  150.             IF (User_Id = '') THEN
  151.                 File_Name := Me_Path + 'MECONFIG.DB';
  152.             ELSE
  153.                 Return_Str := '';
  154.                 RM('MAKEUSERPATH');
  155.                 IF (Error_Level) THEN
  156.                     Return_Str := '/T=CONVERSION ERROR/M=Unable to create user directory ' + ME_Path + User_Id + '.USR';
  157.                     Goto EXIT;
  158.                 END;
  159.                 File_Name := Me_Path + User_Id + '.USR\MECONFIG.DB';
  160.             END;
  161.         END;
  162.         IF (Switch_Win_Id(Window3)) THEN
  163.             Erase_Window;
  164.         END;
  165.         RM('400_500^INIT_DB /IW=' + Str(Window1) + '/MW=' + Str(Window2) + '/EW=' +
  166.                 Str(Window3) + '/DW=' + Str(Data_Window));
  167.         IF (Return_Str <> '') THEN
  168.             Goto EXIT;
  169.         END;
  170.  
  171.         IF (Switch_Win_Id(Window2)) THEN
  172.             Save_File;
  173.             IF (Error_Level) THEN
  174.                 Return_Str := '/T=CONVERSION ERROR/M=ERROR IN SAVING FILE: ' + File_Name + '.';
  175.                 Goto EXIT;
  176.             END;
  177.         END;
  178.  
  179.     END;
  180.  
  181.     IF (Next_File = 0) THEN
  182.         Goto USER_LOOP;
  183.     END;
  184.  
  185. {Convert PRINTERS.ME}
  186.     IF (Switch_Win_Id(Window1)) THEN
  187.         Load_File(400_Path + 'PRINTERS.ME');
  188.         IF (Error_Level) THEN
  189.             Return_Str := '/T=CONVERSION ERROR/M=FILE: ' + 400_Path + 'PRINTERS.ME NOT FOUND.';
  190.             Goto EXIT;
  191.         END;
  192.     END;
  193.     IF (Switch_Win_Id(Window2)) THEN
  194.         Erase_Window;
  195.         File_Name := Me_Path + 'PRINTERS.DB';
  196.     END;
  197.     RM('400_500^PRINT_DB /MW=' + Str(Window1) + '/DW=' + Str(Window2) + '/DAW=' + Str(Data_Window));
  198.     IF (Return_Str <> '') THEN
  199.         Goto EXIT;
  200.     END;
  201.  
  202.     IF (Switch_Win_Id(Window2)) THEN
  203.         Save_File;
  204.         IF (Error_Level) THEN
  205.             Return_Str := '/T=CONVERSION ERROR/M=ERROR IN SAVING FILE: ' + File_Name + '.';
  206.             Goto EXIT;
  207.         END;
  208.     END;
  209.  
  210.  
  211. {Convert com module stuff only if com module stuff exists}
  212.     IF (File_Exists(400_Path + 'INITCOM.ME')) THEN
  213.         IF (Switch_Win_Id(Window1)) THEN
  214.             Load_File(400_Path + 'INITCOM.ME');
  215.             IF (Error_Level) THEN
  216.                 Return_Str := '/T=CONVERSION ERROR/M=FILE: ' + 400_Path + 'INITCOM.ME NOT FOUND.';
  217.                 Goto EXIT;
  218.             END;
  219.         END;
  220.         IF (Switch_Win_Id(Window2)) THEN
  221.             Load_File(400_Path + 'PHONELST.ME');
  222.             IF (Error_Level) THEN
  223. {If we don't have this one, it isn't fatal}
  224.                 Erase_Window;
  225.                 Error_Level := 0;
  226.             END;
  227.         END;
  228.         IF (Switch_Win_Id(Window3)) THEN
  229.             Erase_Window;
  230.             File_Name := Me_Path + 'MECOM.DB';
  231.         END;
  232.         RM('400_500^COM_DB /MW=' + Str(Window1) + '/PW=' + Str(Window2) + '/DW=' + Str(Window3) + '/DAW=' + Str(Data_Window));
  233.         IF (Return_Str <> '') THEN
  234.             Goto EXIT;
  235.         END;
  236.  
  237.         IF (Switch_Win_Id(Window3)) THEN
  238.             Save_File;
  239.             IF (Error_Level) THEN
  240.                 Return_Str := '/T=CONVERSION ERROR/M=ERROR IN SAVING FILE: ' + File_Name + '.';
  241.                 Goto EXIT;
  242.             END;
  243.         END;
  244.     END;
  245.  
  246.     Return_Str := '';
  247.  
  248. EXIT:
  249.     IF (Return_Str <> '') THEN
  250.    RM('MEERROR^MessageBox /B=1' + Return_Str);
  251.    Make_Message('4.00 to 5.00 conversion terminated.');
  252.  ELSE
  253.    Make_Message('4.00 to 5.00 conversion complete.');
  254.     END;
  255.  
  256.     IF (Switch_Win_Id(Data_Window)) THEN
  257.         Delete_Window;
  258.     END;
  259.     IF (Switch_Win_Id(Window1)) THEN
  260.         Delete_Window;
  261.     END;
  262.     IF (Switch_Win_Id(Window2)) THEN
  263.         Delete_Window;
  264.     END;
  265.     IF (Switch_Win_Id(Window3)) THEN
  266.         Delete_Window;
  267.     END;
  268.  
  269.     Switch_Win_Id(Active_Window);
  270.     File_Search_Attr := T_File_Search_Attr;
  271.     File_Search_Rec := T_File_Search_Rec;
  272.     Refresh := True;
  273.     Redraw;
  274.     User_Id := T_User_Id;
  275.     RM(User_Id + 'INIT');
  276.  
  277.     Error_Level := 0;
  278.  
  279. END_MACRO;
  280.  
  281. $MACRO INIT_DB TRANS;
  282. {******************************************************************************
  283.                                                                 MULTI-EDIT MACRO
  284.  
  285. Name:    INIT_DB
  286.  
  287. Description:  Converts INIT.SRC.  Places extension stuff into DB files.  Moves
  288.                             keymap stuff to KEYMAP.SRC.
  289.  
  290.                              (C) Copyright 1989 by American Cybernetics, Inc.
  291. ******************************************************************************}
  292.  
  293.     Def_Int(T_Reg_Exp_Stat,Start_Line,Start_Col,Ext_Counter,Data_Window,
  294.                     Init_Window,Error_Window,Meconfig_Window,Pgm_Counter,T_Ignore_Case,
  295.                     TInt,Ext_Flag,T_Tab_Expand,T_Swap_Mode,search_Line,End_line);
  296.     Def_Str(Ext_Name[7],Ext_Line[2000],T_STR,T_Word_Delimits[40],TParam,
  297.                     T_Name[40],Whole_Line,Init_Name[8],Error_String,DPT[12]);
  298.  
  299.     EXt_Flag := 0;
  300.     T_Tab_Expand := Tab_Expand;
  301.     Tab_Expand := True;
  302.     T_Reg_Exp_Stat := Reg_Exp_Stat;
  303.     Reg_Exp_Stat := False;
  304.     T_Word_Delimits := Word_Delimits;
  305.     Word_Delimits := '()"'',#$@!%^&*{}[]?/||;: |255|9';
  306.     Init_Window := Parse_Int('/IW=',MParm_Str);
  307.     Meconfig_Window := Parse_Int('/MW=',MParm_Str);
  308.     Error_Window := Parse_Int('/EW=',MParm_Str);
  309.     Data_Window := Parse_Int('/DW=',MParm_Str);
  310.     Return_Int := 0;
  311.  
  312.     IF ((Switch_Win_Id(Init_Window) = 0) or (Switch_Win_Id(Meconfig_Window) = 0)
  313.         or (Switch_Win_Id(Error_Window) = 0) or (Switch_Win_Id(Data_Window) = 0))
  314.         THEN
  315.         Error_String := 'Window for init conversion not found!';
  316.         Goto EXIT;
  317.     END;
  318.  
  319.     Error_String := '';
  320.  
  321.     T_Swap_Mode := Swap_Mode;
  322.     Swap_Mode := 3;
  323.  
  324.     T_Ignore_Case := Ignore_Case;
  325.     Ignore_Case := True;
  326.  
  327.  
  328. {In order to have all the guys settings, we gotta compile and run his original
  329. init.src}
  330.     IF (Switch_Win_Id(Init_Window)) THEN
  331.     END;
  332.     IF (Search_Fwd('INIT',0)) THEN
  333.         WHILE (Cur_Char <> ' ') DO
  334.             Left;
  335.         END;
  336.         Right;
  337.         Init_Name := Get_Word('; ');
  338.     ELSE
  339.         Init_Name := 'INIT';
  340.     END;
  341.  
  342.     Call COMPILE;
  343.  
  344.     T_Tab_Expand := Tab_Expand;
  345.     Tab_Expand := True;
  346.     T_Reg_Exp_Stat := Reg_Exp_Stat;
  347.     Reg_Exp_Stat := False;
  348.     T_Word_Delimits := Word_Delimits;
  349.     Word_Delimits := '()"'',#$@!%^&*{}[]?/||;: |255|9';
  350.  
  351.     IF (Return_Int) THEN
  352.         Error_String := 'Problem compiling ' + Init_Name + '.SRC';
  353.         Goto EXIT;
  354.     END;
  355.  
  356.     RM(Init_Name);
  357.  
  358.     T_Word_Delimits := Word_Delimits;
  359.     Word_Delimits := '()"'',#$@!%^&*{}[]?/||;: |255|9';
  360.  
  361.     T_Swap_Mode := Swap_Mode;
  362.     Swap_Mode := 3;
  363.  
  364.  
  365.     IF (Switch_Win_Id(Init_Window)) THEN
  366.     END;
  367.  
  368.     Tof;
  369.     Return_Int := 0;
  370.     IF (SEARCH_FWD('$MACRO ' + USER_ID + 'INIT DUMP;',0) = 0) THEN
  371.         Error_String := 'CAN''T RECOGNIZE ' + File_Name + ' AS A LEGAL INIT SOURCE FILE.';
  372.         Return_Int := -1;
  373.         Goto EXIT;
  374.     END;
  375.  
  376.     IF (Switch_Win_Id(Meconfig_Window)) THEN
  377.     END;
  378. {Create headers for db files}
  379.     RM('400_500^COPY_DB /HPT=USER.DB/R=1/DW=' + Str(Data_Window) + '/TW=' + Str(Meconfig_Window));
  380.     RM('400_500^COPY_DB /HPT=KMAPLST.DB/R=1/DW=' + Str(Data_Window) + '/TW=' + Str(Meconfig_Window));
  381.     RM('400_500^COPY_DB /HPT=PRN_DEV.DB/R=1/DW=' + Str(Data_Window) + '/TW=' + Str(Meconfig_Window));
  382.     RM('400_500^COPY_DB /HPT=LANGUAGE.DB/R=1/DW=' + Str(Data_Window) + '/TW=' + Str(Meconfig_Window));
  383.     RM('400_500^COPY_DB /HPT=PGM.DB/R=1/DW=' + Str(Data_Window) + '/TW=' + Str(Meconfig_Window));
  384.     RM('400_500^COPY_DB /HPT=DEFAULT.PGM/R=1/DW=' + Str(Data_Window) + '/TW=' + Str(Meconfig_Window));
  385.     RM('400_500^COPY_DB /HPT=EXT.DB/DW=' + Str(Data_Window) + '/TW=' + Str(Meconfig_Window));
  386.  
  387.     IF (Switch_Win_Id(Init_Window)) THEN
  388.     END;
  389.     Ext_Counter := 1;
  390.     WHILE (Search_Fwd('Extensions' + Str(Ext_Counter),0)) DO
  391.         ++Ext_Flag;
  392.         Start_Line := C_Line;
  393.         Word_Right;
  394.         Right;
  395.  
  396. MORE_EXTENSIONS:
  397.             Start_Col := C_Col;
  398.             Ext_Name := Caps(Get_Word('('));
  399.             Make_Message('Converting data for extension: .' + Ext_Name);
  400. {Put the extension data in the extensions database file}
  401.             Ext_Line := 'EXT=' + Ext_Name;
  402.             IF (Search_Fwd('''.' + Ext_Name + '''',0)) THEN
  403.                 T_Str := Get_Word(',');
  404.                 Right;
  405.                 Right;
  406.                 T_Str := Get_Word('''');
  407.                 TParam := Str(Parse_Int('/DOC=',T_Str));
  408.                 IF (TParam <> '0') THEN
  409.                     Ext_Line := Ext_Line + 'DOC=' + TParam;
  410.                 END;
  411.                 TParam := Str(Parse_Int('/WW=',T_Str));
  412.                 IF (TParam <> '0') THEN
  413.                     Ext_Line := Ext_Line + 'WW=' + TParam;
  414.                 END;
  415.                 TParam := Str(XPos(Parse_Str('/IND=',T_Str),'OAS',1));
  416.                 IF (TParam <> '0') THEN
  417.                     Ext_Line := Ext_Line + 'IND=' + TParam;
  418.                 END;
  419.                 IF (Parse_Int('/TS=',T_Str) = 0) THEN
  420.                     Ext_Line := Ext_Line + 'UF=1';
  421.                 END;
  422.                 Mark_Pos;
  423.                 IF (Search_Fwd('''.' + Ext_Name + '_FORMAT''',0)) THEN
  424.                     Return_Str := Get_Word(',');
  425.                     Right;
  426.                     Right;
  427.                     Ext_Line := Ext_Line + 'FORMAT=' + Get_Word('''');
  428.                     Down;
  429.                 END;
  430.                 Goto_Mark;
  431.                 TParam := Str(Parse_Int('/TS=',T_Str));
  432.                 IF (TParam <> '0') THEN
  433.                     Ext_Line := Ext_Line + 'TS=' + TParam;
  434.                 END;
  435.                 TParam := Str(Parse_Int('/RM=',T_Str));
  436.                 IF (TParam <> '0') THEN
  437.                     Ext_Line := Ext_Line + 'RM=' + TParam;
  438.                 END;
  439.                 TParam := Parse_Str('/LS=',T_Str);
  440.                 IF (TParam <> '') THEN
  441.                     Ext_Line := Ext_Line + 'LS=' + TParam;
  442.                 END;
  443.                 Mark_Pos;
  444.                 IF (Search_Fwd('''.' + Ext_Name + '_POST''',0)) THEN
  445.                     Return_Str := Get_Word(',');
  446.                     Right;
  447.                     Right;
  448.                     Ext_Line := Ext_Line + 'MAC=' + Get_Word('''');
  449.                     Down;
  450.                 END;
  451.                 Goto_Mark;
  452.                 TParam := Parse_Str('/DIR=',T_Str);
  453.                 IF (TParam <> '') THEN
  454.                     Ext_Line := Ext_Line + 'DIR=' + TParam;
  455.                 END;
  456.                 Ext_Line := Ext_Line + 'CP=Compiler/Program';
  457.             END;
  458. {Place the DB line into the DB file}
  459.             DPT := 'EXT.DB';
  460.             Call INSERT_RECORD;
  461.             Down;
  462.             Goto_Col(1);
  463. {Look for any compiler/program setups}
  464.             PGM_Counter := 1;
  465.             WHILE (Search_Fwd('.' + Ext_Name + '_PGM' + Str(Pgm_Counter),0)) DO
  466.                 Return_Str := Get_Word(',');
  467.                 Right;
  468.                 Right;
  469.                 T_Str := Get_Word('''');
  470.                 Ext_Line := 'PN=' + Parse_Str('/PN=',T_Str);
  471.                 TInt := XPos('/CL=',T_Str,1);
  472.                 IF (TInt) THEN
  473.                     Ext_Line := Ext_Line + 'CL=' + Copy(T_Str,TInt + 4,255);
  474.                 END;
  475.                 TParam := Str(Parse_Int('/CP=',T_Str));
  476.                 IF (TParam <> '0') THEN
  477.                     Ext_Line := Ext_Line + 'CP=' + TParam;
  478.                 END;
  479.                 TParam := Parse_Str('/PT=',T_Str);
  480.                 IF (TParam <> '') THEN
  481.                     Ext_Line := Ext_Line + 'PT=' + TParam;
  482.                 END;
  483.                 TParam := Str(Parse_Int('/LC=',T_Str));
  484.                 IF (TParam = '0') THEN
  485.                     TParam := '1';
  486.                 ELSE
  487.                     TParam := '6';
  488.                 END;
  489.                 Ext_Line := Ext_Line + 'SM=' + TParam;
  490.                 TParam := Str(Parse_Int('/CS=',T_Str));
  491.                 IF (TParam <> '0') THEN
  492.                     Ext_Line := Ext_Line + 'CS=' + TParam;
  493.                 END;
  494.                 TParam := Str(Parse_Int('/SA=',T_Str));
  495.                 IF (TParam <> '0') THEN
  496.                     Ext_Line := Ext_Line + 'SA=' + TParam;
  497.                 END;
  498.                 TParam := Str(Parse_Int('/RF=',T_Str));
  499.                 IF (TParam <> '0') THEN
  500.                     Ext_Line := Ext_Line + 'RF=' + TParam;
  501.                 END;
  502.                 TParam := Str(Parse_Int('/DP=',T_Str));
  503.                 IF (TParam <> '0') THEN
  504.                     Ext_Line := Ext_Line + 'DP=' + TParam;
  505.                 END;
  506.                 DPT := Ext_Name + '.PGM';
  507.                 IF ((Pgm_Counter = 1) and (Ext_Name <> 'DEFAULT')) THEN
  508.                     IF (Switch_Win_Id(Meconfig_Window)) THEN
  509.                         Eof;
  510.                         IF (C_Col > 1) THEN
  511.                             Down;
  512.                         END;
  513.                         Put_Line('|12' + DPT);
  514.                     END;
  515.                 END;
  516.                 Call INSERT_RECORD;
  517.  
  518.                 Down;
  519.                 Goto_Col(1);
  520.                 ++Pgm_Counter;
  521.             END;
  522.  
  523.             IF (Switch_Win_Id(Init_Window)) THEN
  524.             END;
  525.             Goto_Line(Start_Line);
  526.             Goto_Col(Start_Col);
  527.             Word_Right;
  528.             Word_Right;
  529.             Right;
  530.             IF (At_Eol) THEN
  531.                 Down;
  532.                 Goto_Col(1);
  533.             ELSE
  534.                 Goto MORE_EXTENSIONS;
  535.             END;
  536.  
  537.         ++Ext_Counter;
  538.         Goto_Line(Start_Line);
  539.     END;
  540.  
  541. {Add program types and language types}
  542.     Make_Message('Converting program types...');
  543.     IF (Switch_Win_Id(Init_Window)) THEN
  544.     END;
  545.     Ext_Counter := 1;
  546.  
  547.     WHILE (Search_Fwd('%Set_Global_Str(''PGM' + Str(Ext_Counter),0)) DO
  548.         Start_Line := C_Line;
  549.         Word_Right;
  550.         Word_Right;
  551.  
  552. MORE_PGMS:
  553.             Start_Col := C_Col;
  554.             Ext_Line := 'PGM=' + Caps(Get_Word('('));
  555.             DPT := 'PGM.DB';
  556.             Call INSERT_RECORD;
  557.             Goto_Line(Start_Line);
  558.             Goto_Col(Start_Col);
  559.             Return_Str := Get_Word(')');
  560.             Right;
  561.             IF (Cur_Char = '''') THEN
  562.                 Down;
  563.                 Goto_Col(1);
  564.             ELSE
  565.                 Goto MORE_PGMS;
  566.             END;
  567.  
  568.         ++Ext_Counter;
  569.         Goto_Line(Start_Line);
  570.     END;
  571.  
  572.     Make_Message('Converting Language types...');
  573.     IF (Switch_Win_Id(Init_Window)) THEN
  574.     END;
  575.     Ext_Counter := 1;
  576.     WHILE (Search_Fwd('%Set_Global_Str(''LANGUAGE' + Str(Ext_Counter),0)) DO
  577.         Start_Line := C_Line;
  578.         Word_Right;
  579.         Word_Right;
  580.  
  581. MORE_LANGS:
  582.             Start_Col := C_Col;
  583.             Ext_Line := 'LANG=' + Caps(Get_Word('('));
  584.             DPT := 'LANGUAGE.DB';
  585.             Call INSERT_RECORD;
  586.             Goto_Line(Start_Line);
  587.             Goto_Col(Start_Col);
  588.             Return_Str := Get_Word(')');
  589.             Right;
  590.             IF (Cur_Char = '''') THEN
  591.                 Down;
  592.                 Goto_Col(1);
  593.             ELSE
  594.                 Goto MORE_LANGS;
  595.             END;
  596.  
  597.         ++Ext_Counter;
  598.         Goto_Line(Start_Line);
  599.     END;
  600.  
  601. COMPILE_IT:
  602.     Make_Message('Creating and compiling new INIT and KEYMAP macros...');
  603.     Set_Global_Int('SETUP_CHANGED',Global_Int('SETUP_CHANGED') or $02);
  604.     RM('SETUP^SETSAVE');
  605.     Goto EXIT;
  606.  
  607. INSERT_RECORD:
  608.     IF (Switch_Win_Id(Meconfig_Window)) THEN
  609.         Reg_Exp_Stat := True;
  610.         Ignore_Case := True;
  611.         Tof;
  612. {Find data page title}
  613.         IF (Search_Fwd('%|12' + DPT,0)) THEN
  614.  
  615.             search_line := C_Line;
  616.  
  617. {Find end of data}
  618.             Eol;
  619.             IF (Search_Fwd('%|12',0) = 0) THEN
  620.                 Eof;
  621.                 IF (C_Col > 0) THEN
  622.                     Down;
  623.                 END;
  624.             END;
  625.             Up;
  626.             End_Line := C_Line;
  627.             Goto_Line(search_Line);
  628.             Reg_Exp_Stat := False;
  629.             IF (Search_Fwd(Ext_line,End_Line - STart_Line + 1) = false) THEN
  630.                 Goto_Line(End_Line);
  631.                 Eol;
  632.                 Insert_Mode := True;
  633.                 Cr;
  634.                 Put_Line(Ext_Line);
  635.             END;
  636.             Reg_Exp_Stat := True;
  637.  
  638.             Goto_Line(End_Line);
  639.  
  640.         END;
  641.     END;
  642.     IF (Switch_Win_Id(Init_Window)) THEN
  643.     END;
  644.     Ret;
  645.  
  646.  
  647. COMPILE:
  648.     Reg_Exp_Stat := True;
  649.     Return_Int := 0;
  650.     T_Str := File_Name;
  651.     Make_Message('Compiling "'+ T_Str +'"...');
  652. {build a command line to compile the macro}
  653.     Whole_Line := 'MEMAC.EXE -P' + Me_Path + ' ' + File_Name + '>' + user_id +
  654.     'SETER.TMP';
  655. {If the Dos version is 3.0 or above, then add the ME_Path to the compiler
  656. command line to insure the correct version of the macro compiler gets run.}
  657.     IF ((Dos_Version and $00FF) > 2) THEN
  658.         Whole_Line := ME_PATH + Whole_Line;
  659.     END;
  660.  
  661.     Del_File(user_id + 'SETER.TMP');
  662.     Error_Level := 0;
  663.     Shell_To_Dos(Whole_Line,True);
  664.  
  665.     IF (Error_Level <> 0) THEN
  666.         beep;
  667. {Error messages for unsuccessful compile}
  668.         IF (Error_Level = 3008) THEN
  669.     NO_MEMORY_ERROR:
  670.             Put_Box(15,6,67,11,0,error_color,'INSUFFICIENT MEMORY TO COMPILE ' + File_Name + '!',true);
  671.             Write('Please exit editor and compile ' + File_Name + ' in the',16,7,0,error_color);
  672.             Write('Multi-Edit directory.',16,8,0,error_Color);
  673.             Write('Press any key to continue...',30,9,0,error_Color);
  674.             Error_Level := 0;
  675.             Read_Key;
  676.             Kill_Box;
  677.             Return_Int := 1;
  678.             RET;
  679.         END;
  680.         RM( 'MEERROR' );
  681.         Return_Int := 1;
  682.         RET;
  683.     END;
  684.  
  685.     IF (Switch_Win_Id(Error_Window)) THEN
  686.     END;
  687.  
  688.     Load_File(user_id + 'SETER.TMP');
  689.     IF (Error_Level = 3002) THEN
  690.             beep;
  691. PATH_ERROR:
  692.             Put_Box(15,6,58,9,0,error_color,'ERROR IN COMPILING ' + T_Str + '!',true);
  693.             Write('Check for proper path to macro compiler.',16,7,0,error_Color);
  694.             Write('Press any key to continue...',24,8,0,error_Color);
  695.             Error_Level := 0;
  696.             Read_Key;
  697.             Kill_Box;
  698.             Return_Int := 1;
  699.             RET;
  700.     END;
  701.     Ignore_case := True;
  702.     If (Search_Fwd('MEMORY',0)) THEN
  703.         Goto No_Memory_Error;
  704.     END;
  705.     TOF;
  706.     If (Search_Fwd(Version,1) = 0) Then
  707. {we should only get here if somehow a different version of the macro compiler
  708. was run than the version of ME.  A distinct possiblilty if multiple versions
  709. of ME are on the system.}
  710.         Beep;
  711.         Put_Box(1,9,80,14,0,Error_Color,'WARNING!',True);
  712.         Write('Macro compiler version incompatible with editor version.',2,10,0,error_color);
  713.         Write('Unpredictable results could occur.',2,11,0,error_color);
  714.         Write('Check DOS environment for possible incorrect search path.',2,12,0,error_color);
  715.         Write('Press any key...',35,13,0,Error_Color);
  716.         Read_Key;
  717.         Kill_Box;
  718.         Make_Message('');
  719.         Kill_Box;
  720.         Kill_box;
  721.         New_Screen;
  722.         Messages := True;
  723.         Undo_Stat := True;
  724.         Return_Str := 'COMP WARNING';
  725.     End;
  726.  
  727.     If (Search_Fwd('{Error}||{Aborted}',0)) Then
  728.         Beep;
  729.         Put_Box(1,9,80,14,0,Error_Color,'ERROR!',True);
  730.         Write('Error in compiling '+ T_Str + '!',2,10,0,error_color);
  731.         Write(Copy(Get_Line,1,76),2,11,0,error_color);
  732.         Write('Check file: ' + T_Str + '.',2,12,0,error_color);
  733.         Write('Press any key...',35,13,0,Error_Color);
  734.         Read_Key;
  735.         Kill_Box;
  736.         Make_Message('');
  737.         Kill_Box;
  738.         Kill_box;
  739.         New_Screen;
  740.         Messages := True;
  741.         Undo_Stat := True;
  742.         Return_Int := 1;
  743.         RET;
  744.     End;
  745.     Erase_Window;
  746.     Del_File(user_id + 'SETER.TMP');
  747.     TINT := Switch_Win_Id(Init_Window);
  748. RET;
  749.  
  750. EXIT:
  751.     IF (Error_String <> '') THEN
  752.         Return_Str := '/T=INIT CONVERSION ERROR/M=' + Error_String;
  753.     ELSE
  754.         Return_Str := '';
  755.     END;
  756.  
  757.     Reg_Exp_Stat := T_Reg_Exp_Stat;
  758.     Ignore_Case := T_Ignore_Case;
  759.  
  760.     Swap_Mode := T_Swap_Mode;
  761.  
  762. END_MACRO;
  763.  
  764. $MACRO KEY_DB TRANS;
  765. {******************************************************************************
  766.                                                                 MULTI-EDIT MACRO
  767.  
  768. Name:    KEY_DB
  769.  
  770. Description:  Converts Keymap files to DB files.
  771.  
  772.                              (C) Copyright 1989 by American Cybernetics, Inc.
  773. ******************************************************************************}
  774.     Def_Int(ME_Window,DB_Window,Data_Window,T_int);
  775.     Def_Str(Error_String,ME_Line,DB_Line,Field);
  776.  
  777.     Me_Window := Parse_Int('/MW=',MParm_Str);
  778.     Db_Window := Parse_Int('/DW=',MParm_Str);
  779.     Data_Window := Parse_Int('/DAW=',MParm_Str);
  780.     Error_String := '';
  781.  
  782.     IF ((Switch_Win_Id(Data_Window) = 0) or (Switch_Win_Id(Db_Window) = 0)
  783.              or (Switch_Win_Id(ME_Window) = 0)) THEN
  784.         Error_String := 'Window for keymap conversion not found!';
  785.         Goto EXIT;
  786.     END;
  787.     Error_String := '';
  788.  
  789.     Make_Message('Converting KEYMAP file: ' + Truncate_Path(File_Name) + '...');
  790.     RM('400_500^COPY_DB /HPT=KEYMAP.DB/DW=' + Str(Data_Window) + '/TW=' + Str(Db_Window));
  791.  
  792.     Switch_Win_Id(DB_Window);
  793.     Tof;
  794.     Del_Line;
  795.     Eof;
  796.     IF (C_Col > 1) THEN
  797.         Down;
  798.     END;
  799.     Put_Line('MC=MOUEVENTDESCR=Mouse interface handlerK1=<MEVENT>MF=MOUSE');
  800.     Down;
  801.     Put_Line('MC=MOUSEEVENT2DESCR=Right mouse buttonK1=<MEVENT2>MF=MOUSE');
  802.     Down;
  803.  
  804.     IF (Switch_Win_Id(ME_Window)) THEN
  805.     END;
  806.   Format_Line :=
  807. '                                                                                                     ';
  808. {
  809. MAINHELP           Main help screen          <F1>            <AltH>          Help   EDIT      USERIN       /X=1
  810. MC=MAINHELPDESCR=Main help screenK1=<F1>K2=<AltH>FKL=HelpMODE=1MF=USERIN
  811. }
  812.     Tof;
  813.     WHILE (Not(At_Eof)) DO
  814.         ME_Line := Get_Line;
  815.         IF (Me_Line = '') THEN
  816.             Goto BLANK;
  817.         END;
  818.         Tabs_To_Spaces(Me_Line);
  819.         IF (XPOS('|254',Me_Line,1)) THEN
  820.             Db_Line := '@■=' + Copy(Me_Line,1,75);
  821.         ELSE
  822.             Db_Line := 'MC=' + Shorten_Str(Copy(Me_Line,1,18));
  823.  
  824.             Field := Shorten_Str(Copy(Me_Line,20,25));
  825.             IF (Field <> '') THEN
  826.                 Db_Line := DB_Line + 'DESCR=' + Field;
  827.             END;
  828.  
  829.             Field := Shorten_Str(Copy(Me_Line,46,15));
  830.             IF (Field <> '') THEN
  831.                 Db_Line := DB_Line + 'K1=' + Field;
  832.             END;
  833.  
  834.             Field := Shorten_Str(Copy(Me_Line,62,15));
  835.             IF (Field <> '') THEN
  836.                 Db_Line := DB_Line + 'K2=' + Field;
  837.             END;
  838.  
  839.             Field := Shorten_Str(Copy(Me_Line,78,6));
  840.             IF (Field <> '') THEN
  841.                 Db_Line := DB_Line + 'FKL=' + Field;
  842.             END;
  843.  
  844.             T_Int := XPos(Copy(ME_Line,85,1),'EDTA',1);
  845.             IF (T_Int = 0) THEN
  846.                 T_Int := 1;
  847.             END;
  848.             Db_Line := DB_Line + 'MODE=' + Str(T_Int);
  849.  
  850.             Field := Shorten_Str(Copy(Me_Line,95,12));
  851.             IF (Field <> '') THEN
  852.                 IF (Field = '/CMD') THEN
  853.                     Db_Line := DB_Line + 'MF=NOT APPLICABLE';
  854.                 ELSE
  855.                     Db_Line := DB_Line + 'MF=' + Field;
  856.                 END;
  857.             END;
  858.  
  859.             Field := Shorten_Str(Copy(Me_Line,108,6));
  860.             IF (Field <> '') THEN
  861.                 Db_Line := DB_Line + 'PARAM=' + Field;
  862.             END;
  863.  
  864.         END;
  865.         IF (Switch_Win_Id(Db_Window)) THEN
  866.         END;
  867.         Put_Line(Db_Line);
  868.         Down;
  869. BLANK:
  870.         IF (Switch_Win_Id(ME_Window)) THEN
  871.         END;
  872.         Down;
  873.     END;
  874.     IF (Switch_Win_Id(DB_Window)) THEN
  875.     END;
  876.     Goto EXIT;
  877.  
  878. EXIT:
  879.     IF (Error_String <> '') THEN
  880.         Return_Str := '/T=KEYMAP CONVERSION ERROR/M=' + Error_String;
  881.     ELSE
  882.         Return_Str := '';
  883.     END;
  884.  
  885. END_MACRO;
  886.  
  887. $MACRO PRINT_DB TRANS;
  888. {******************************************************************************
  889.                                                                 MULTI-EDIT MACRO
  890.  
  891. Name:    PRINT_DB
  892.  
  893. Description:  Converts PRINTERS.ME to PRINTERS.DB.
  894.  
  895.                              (C) Copyright 1989 by American Cybernetics, Inc.
  896. ******************************************************************************}
  897.  
  898.     Def_Int(Me_Window,Db_Window,Data_Window,Jx,Jy);
  899.     Def_Str(TStr[2048],TStr2[2048],TStr3,Error_String);
  900.  
  901.     Me_Window := Parse_Int('/MW=',MParm_Str);
  902.     Db_Window := Parse_Int('/DW=',MParm_Str);
  903.     Data_Window := Parse_Int('/DAW=',MParm_Str);
  904.  
  905.     IF ((Switch_Win_Id(Me_Window) = 0) or (Switch_Win_Id(Db_Window) = 0)
  906.              or (Switch_Win_Id(Data_Window) = 0)) THEN
  907.         Error_String := 'Window for printer driver conversion not found!';
  908.         Goto EXIT;
  909.     END;
  910.  
  911.     Error_String := '';
  912.  
  913.     Make_Message('Converting PRINTERS file...');
  914.  
  915.     RM('400_500^COPY_DB /HPT=PRINTERS.DB/NOHPT=1/DW=' + Str(Data_Window) + '/TW=' + Str(Db_Window));
  916.     Switch_Win_Id(Db_window);
  917.     Eof;
  918.     IF (C_Col > 1) THEN
  919.         Down;
  920.     END;
  921.  
  922.     IF (Switch_Win_Id(Me_Window)) THEN
  923.     END;
  924.     WHILE (Not(At_Eof)) DO
  925.         TStr := Get_Line;
  926.         Down;
  927.         WHILE ((XPos('/PT=',Get_Line,1) = 0) and (At_Eof = 0)) DO
  928.             Tstr := TStr + Get_Line;
  929.             Down;
  930.         END;
  931.         IF (Switch_Win_Id(Db_Window)) THEN
  932.             Jx := 0;
  933.             Tstr2 := 'PT=' + Parse_Str('/PT=',TStr);
  934.             WHILE (Jx < 18) DO
  935.                 ++Jx;
  936.  
  937.                 TStr3 := Parse_Str('/N' + Str(Jx) + '=',Tstr);
  938.                 IF (TStr3 <> '') THEN
  939.                     Jy := 1;
  940. DOUBLE_N:
  941.                     Jy := XPos('',TStr3,Jy);
  942.                     IF (Jy) THEN
  943.                         TStr3 := Str_Ins('',TStr3,Jy);
  944.                         Jy := Jy + 2;
  945.                         Goto DOUBLE_N;
  946.                     END;
  947.                     TStr2 := TStr2 + 'N' + Str(Jx) + '=' + Tstr3;
  948.                 END;
  949.                 TStr3 := Parse_Str('/F' + Str(Jx) + '=',Tstr);
  950.                 IF (TStr3 <> '') THEN
  951.                     Jy := 1;
  952. DOUBLE_F:
  953.                     Jy := XPos('',TStr3,Jy);
  954.                     IF (Jy) THEN
  955.                         TStr3 := Str_Ins('',TStr3,Jy);
  956.                         Jy := Jy + 2;
  957.                         Goto DOUBLE_F;
  958.                     END;
  959.                     TStr2 := TStr2 + 'F' + Str(Jx) + '=' + Tstr3;
  960.                 END;
  961.                 TStr3 := Parse_Str('/C' + Str(Jx) + '=',Tstr);
  962.                 IF (TStr3 <> '') THEN
  963.                     Jy := 1;
  964. DOUBLE_C:
  965.                     Jy := XPos('',TStr3,Jy);
  966.                     IF (Jy) THEN
  967.                         TStr3 := Str_Ins('',TStr3,Jy);
  968.                         Jy := Jy + 2;
  969.                         Goto DOUBLE_C;
  970.                     END;
  971.                     TStr2 := TStr2 + 'C' + Str(Jx) + '=' + Tstr3;
  972.                 END;
  973.             END;
  974. {Change the global string of printer type to new convention}
  975.             IF (Parse_Str('/PT=',TStr) = Global_Str('PRINTER_TYPE')) THEN
  976.                 Set_Global_Str('PRINTER_TYPE',TStr2);
  977.             END;
  978.             Put_Line(TStr2);
  979.             Down;
  980.         END;
  981.         IF (Switch_Win_Id(Me_Window)) THEN
  982.         END;
  983.     END;
  984.  
  985.     Make_Message('PRINTERS file: ' + File_Name + ' converted.');
  986.  
  987.     Goto EXIT;
  988. EXIT:
  989.     IF (Error_String <> '') THEN
  990.         Return_Str := '/T=PRINTER FILE CONVERSION ERROR/M=' + Error_String;
  991.     ELSE
  992.         Return_Str := '';
  993.     END;
  994.  
  995.  
  996. END_MACRO;
  997.  
  998. $MACRO COM_DB TRANS;
  999. {******************************************************************************
  1000.                                                                 MULTI-EDIT MACRO
  1001.  
  1002. Name:    COM_DB
  1003.  
  1004. Description:  Converts INITCOM.ME.
  1005.  
  1006.                              (C) Copyright 1989 by American Cybernetics, Inc.
  1007. ******************************************************************************}
  1008.     Def_Int(Me_Window,Db_Window,Phone_Window,Data_Window,Jx,Jy,Search_Line);
  1009.     Def_Str(TStr[2048],TStr2[2048],TStr3,Error_String);
  1010.  
  1011.     Reg_Exp_Stat := True;
  1012.  
  1013.     Me_Window := Parse_Int('/MW=',MParm_Str);
  1014.     Db_Window := Parse_Int('/DW=',MParm_Str);
  1015.     Phone_Window := Parse_Int('/PW=',MParm_Str);
  1016.     Data_Window := Parse_Int('/DAW=',MParm_Str);
  1017.  
  1018.     IF ((Switch_Win_Id(Me_Window) = 0) or (Switch_Win_Id(Db_Window) = 0)
  1019.          or (Switch_Win_Id(Phone_Window) = 0)or (Switch_Win_Id(Data_Window) = 0)) THEN
  1020.         Error_String := 'Window for MECOM conversion not found!';
  1021.         Goto EXIT;
  1022.     END;
  1023.  
  1024.     Error_String := '';
  1025.  
  1026.     Make_Message('Converting com module files...');
  1027. {Change the name to be compatible with new conventions}
  1028.     Switch_Win_Id(Me_Window);
  1029.     Tof;
  1030.     Block_Begin;
  1031.     Eof;
  1032.     Block_End;
  1033.     Jx := Cur_Window;
  1034.     Switch_Win_Id(Db_Window);
  1035.     Tof;
  1036.     Put_Line('|12INITCOM.ME');
  1037.     Down;
  1038.     Window_Copy(Jx);
  1039.  
  1040. {Delete the no longer used logon parameters and BBS line}
  1041.     IF (Search_Fwd('/LOGON=',0)) THEN
  1042.         Del_Line;
  1043.     END;
  1044.     Tof;
  1045.     IF (Search_Fwd('/BBS=',0)) THEN
  1046.         Del_Line;
  1047.     END;
  1048.     Eof;
  1049.     IF (C_Col > 1) THEN
  1050.         Down;
  1051.     END;
  1052.  
  1053.     RM('400_500^COPY_DB /HPT=DOWNLOAD.DB/R=1/DW=' + Str(Data_Window) + '/TW=' + Str(Db_Window));
  1054.  
  1055. {Put in users download records unless they are identical to ours.  It will be
  1056. up to the user to delete any that are currently incompatible}
  1057.  
  1058. SEARCH_DOWNLOAD:
  1059.     Tof;
  1060.     IF (Search_Fwd('%/DOWNLOAD[1-9]',0)) THEN
  1061.         TStr := Get_Line;
  1062.         Del_Line;
  1063.         TStr2 := '';
  1064.         IF (Parse_Str('/PN=',TStr) <> '') THEN
  1065.             TStr2 := TSTr2 + 'PN=' + Parse_Str('/PN=',TStr);
  1066.         END;
  1067.         IF (Parse_Str('/CL=',TStr) <> '') THEN
  1068.             TStr2 := TSTr2 + 'CL=' + Copy(TStr,XPos('/CL=',TStr,1) + 4,1000);
  1069.         END;
  1070.         TStr2 := TSTr2 + 'PF=' + Str(Parse_Int('/PF=',TStr) + 1);
  1071.         IF (Parse_Int('/IC=',TStr)) THEN
  1072.             TStr2 := TSTr2 + 'IC=' + Parse_Str('/IC=',TStr);
  1073.         END;
  1074.         IF (Search_Fwd(Tstr2,0) = 0) THEN
  1075.             Eof;
  1076.             IF (C_Col > 1) THEN
  1077.                 Down;
  1078.             END;
  1079.             Put_Line(TStr2);
  1080.         END;
  1081.  
  1082.         Goto SEARCH_DOWNLOAD;
  1083.     END;
  1084.  
  1085.     Eof;
  1086.     IF (C_Col > 1) THEN
  1087.         Down;
  1088.     END;
  1089.  
  1090.     RM('400_500^COPY_DB /HPT=UPLOAD.DB/DW=' + Str(Data_Window) + '/TW=' + Str(Db_Window));
  1091.     Search_Line := C_Line;
  1092.  
  1093. SEARCH_UPLOAD:
  1094.     Tof;
  1095.     IF (Search_Fwd('%/UPLOAD[1-9]',0)) THEN
  1096.         TStr := Get_Line;
  1097.         Del_Line;
  1098.         --Search_Line;
  1099.         TStr2 := '';
  1100.         IF (Parse_Str('/PN=',TStr) <> '') THEN
  1101.             TStr2 := TSTr2 + 'PN=' + Parse_Str('/PN=',TStr);
  1102.         END;
  1103.         IF (Parse_Str('/CL=',TStr) <> '') THEN
  1104.             TStr2 := TSTr2 + 'CL=' + Copy(TStr,XPos('/CL=',TStr,1) + 4,1000);
  1105.         END;
  1106.         TStr2 := TSTr2 + 'PF=' + Str(Parse_Int('/PF=',TStr) + 1);
  1107.         IF (Parse_Int('/IC=',TStr)) THEN
  1108.             TStr2 := TSTr2 + 'IC=' + Parse_Str('/IC=',TStr);
  1109.         END;
  1110.         Goto_Line(Search_Line);
  1111.         IF (Search_Fwd(Tstr2,0) = 0) THEN
  1112.             Eof;
  1113.             IF (C_Col > 1) THEN
  1114.                 Down;
  1115.             END;
  1116.             Put_Line(TStr2);
  1117.         END;
  1118.         Goto SEARCH_UPLOAD;
  1119.     END;
  1120.  
  1121. {Convert Phone list}
  1122.     Switch_Win_Id(Db_Window);
  1123.     Eof;
  1124.     IF (C_Col > 1) THEN
  1125.         Down;
  1126.     END;
  1127.  
  1128.     RM('400_500^COPY_DB /HPT=PHONELST.DB/DW=' + Str(Data_Window) + '/TW=' + Str(Db_Window));
  1129.     Switch_Win_Id(Db_Window);
  1130.     Eof;
  1131.     IF (C_Col > 1) THEN
  1132.         Down;
  1133.     END;
  1134.  
  1135.     Switch_Win_Id(Phone_Window);
  1136.  
  1137. MORE_PHONES:
  1138.     TStr := Get_Line;
  1139.     Down;
  1140.     IF (Switch_Win_Id(Db_Window)) THEN
  1141.         TStr2 := '';
  1142. {Name}
  1143.         IF (Parse_Str('/N=',Tstr) <> '') THEN
  1144.             Tstr2 := TStr2 + 'N=' + Parse_Str('/N=',Tstr);
  1145.         END;
  1146. {Number}
  1147.         IF (Parse_Str('/#=',Tstr) <> '') THEN
  1148.             Tstr2 := TStr2 + '#=' + Parse_Str('/#=',Tstr);
  1149.         END;
  1150. {Baud}
  1151.         Tstr2 := TStr2 + 'B=' + Str(Parse_Int('/B=',Tstr) + 1);
  1152. {Parity}
  1153.         Tstr2 := TStr2 + 'P=' + Str(Parse_Int('/P=',Tstr) + 1);
  1154. {Data bits}
  1155.         Tstr2 := TStr2 + 'D=' + Str(Parse_Int('/D=',Tstr) + 1);
  1156. {Stop bits}
  1157.         Tstr2 := TStr2 + 'S=' + Str(Parse_Int('/S=',Tstr) + 1);
  1158. {Echo}
  1159.         IF (Parse_Int('/E=',Tstr)) THEN
  1160.             Tstr2 := TStr2 + 'E=' + Parse_Str('/E=',Tstr);
  1161.         END;
  1162. {Macro}
  1163.         IF (Parse_Str('/M=',Tstr) <> '') THEN
  1164.             Tstr2 := TStr2 + 'M=' + Copy(TStr,XPos('/M=',Tstr,1) + 3,1000);
  1165.         END;
  1166.         Put_Line(TStr2);
  1167.         Down;
  1168.     END;
  1169.     Switch_Win_Id(Phone_Window);
  1170.     IF (Not(At_Eof)) THEN
  1171.         Goto MORE_PHONES;
  1172.     END;
  1173.  
  1174.  
  1175.     Goto EXIT;
  1176.  
  1177. EXIT:
  1178.     IF (Error_String <> '') THEN
  1179.         Return_Str := '/T=COMMUNICATIONS MODULE CONVERSION ERROR/M=' + Error_String;
  1180.     ELSE
  1181.         Return_Str := '';
  1182.     END;
  1183.  
  1184. END_MACRO;
  1185.  
  1186. $MACRO CHECK_KEYMAP TRANS;
  1187. {******************************************************************************
  1188.                                                                 MULTI-EDIT MACRO
  1189.  
  1190. Name:    CHECK_KEYMAP
  1191.  
  1192. Description:  Checks and corrects macro file names in the keymap.
  1193.  
  1194.                              (C) Copyright 1989 by American Cybernetics, Inc.
  1195. ******************************************************************************}
  1196.  
  1197.     Def_Str(Sub_Heading[40],Key_Line);
  1198.     Def_Int(Keymap_Window,Data_Window,Pointer);
  1199.  
  1200.     Reg_Exp_Stat := True;
  1201.  
  1202.     Keymap_Window := Window_Id;
  1203.     Data_Window := Parse_Int('/DW=',MParm_Str);
  1204.  
  1205.     IF (Switch_Win_Id(Data_Window) = 0) THEN
  1206.         Return_Str := '/T=KEYMAP CONVERSION ERROR/M=Window for keymap conversion not found!';
  1207.         Goto EXIT;
  1208.     END;
  1209.     Tof;
  1210.     IF (Search_Fwd('%|12KEYMAP.DB$',0) = 0) THEN
  1211.         Return_Str := '/T=KEYMAP CONVERSION ERROR/M=Data for keymap conversion not found!';
  1212.         Goto EXIT;
  1213.     END;
  1214.     IF (Search_Fwd('%@*@*@*@*START@*@*@*@*$',0) = 0) THEN
  1215.         Return_Str := '/T=KEYMAP CONVERSION ERROR/M=Data for keymap conversion not found!';
  1216.         Goto EXIT;
  1217.     END;
  1218.  
  1219.     Reg_Exp_Stat := False;
  1220.     Sub_Heading := '****START****';
  1221.  
  1222. MORE_KEYS:
  1223.     Down;
  1224.     Key_Line := Get_Line;
  1225.     IF ((XPos('|12',Key_Line,1) <> 1) and (At_Eof = False)) THEN
  1226.         IF (XPos('@■=',Key_Line,1) = 1) THEN
  1227.             Pointer := 5;
  1228.             WHILE (Str_Char(Key_Line,Pointer) = '-') DO
  1229.                 ++Pointer;
  1230.             END;
  1231.             Sub_Heading := Copy(Key_Line,Pointer,40);
  1232.             Pointer := 1;
  1233.             WHILE ((Str_Char(Sub_Heading,Pointer) <> '-') and (Svl(Sub_Heading) > Pointer)) DO
  1234.                 ++Pointer;
  1235.             END;
  1236.             Sub_Heading := Remove_Space(Copy(Sub_Heading,1,Pointer - 1));
  1237.             Goto MORE_KEYS;
  1238.         END;
  1239.         Switch_Win_Id(Keymap_Window);
  1240.         Call CHECK_LINE;
  1241.         Switch_Win_Id(Data_Window);
  1242.         Goto MORE_KEYS;
  1243.     END;
  1244.  
  1245.     Make_Message('Keymap checked and updated.');
  1246.     Tof;
  1247.     Return_Str := '';
  1248.     Goto EXIT;
  1249.  
  1250. CHECK_LINE:
  1251.     Make_Message('Checking and updating the macro: ' + Parse_Str('MC=',Key_Line));
  1252.     Tof;
  1253. SEARCH_AGAIN:
  1254.     IF (Search_Fwd('MC=' + Parse_Str('MC=',Key_Line) + '',0) = 0) THEN
  1255.  
  1256. {If we can't find the line, add it to the keymap either under the appropriate
  1257. subheading or at the end of the file}
  1258.         Tof;
  1259.         IF (Search_Fwd(Sub_Heading,0)) THEN
  1260.             Eol;
  1261.             Insert_Mode := True;
  1262.             Cr;
  1263.         ELSE
  1264.             Eof;
  1265.             IF (C_Col > 1) THEN
  1266.                 Down;
  1267.             END;
  1268.         END;
  1269.  
  1270.         Put_Line(Key_Line);
  1271.         Ret;
  1272.     END;
  1273.  
  1274.     IF ((Parse_Str('PARAM=',Get_Line) <> Parse_Str('PARAM=',Key_Line)) or
  1275.         (Parse_Str('MODE=',Get_Line) <> Parse_Str('MODE=',Key_Line))) THEN
  1276.         Eol;
  1277.         Goto SEARCH_AGAIN;
  1278.     END;
  1279. {If we get here, then we found the desired key defintion, so check the macro
  1280. file name and correct if neccesary}
  1281.     IF (Parse_Str('MF=',Get_Line) <> Parse_Str('MF=',Key_Line)) THEN
  1282.         IF (Search_Fwd('MF=' + Parse_Str('MF=',Get_Line),1)) THEN
  1283.             Replace('MF=' + Parse_Str('MF=',Key_Line));
  1284.         ELSE
  1285.             Eol;
  1286.             Text('MF=' + Parse_Str('MF=',Key_Line));
  1287.         END;
  1288.  
  1289.     END;
  1290.     Goto_Col(1);
  1291.     IF (Parse_Str('MID=',Get_Line) <> Parse_Str('MID=',Key_Line)) THEN
  1292.         IF (Search_Fwd('MID=' + Parse_Str('MID=',Get_Line),1)) THEN
  1293.             Replace('MID=' + Parse_Str('MID=',Key_Line));
  1294.         ELSE
  1295.             IF ((XPos('MID=',Get_Line,1) = 0) and (XPos('MID=',Key_Line,1) = 0)) THEN
  1296.                 Ret;
  1297.             END;
  1298.             Eol;
  1299.             Text('MID=' + Parse_Str('MID=',Key_Line));
  1300.         END;
  1301.     END;
  1302.     Ret;
  1303.  
  1304. EXIT:
  1305.  
  1306. END_MACRO;
  1307.  
  1308. $MACRO COPY_DB TRANS;
  1309.     Def_Int(Data_Window,Target_Window,Tint);
  1310.  
  1311.     Data_Window := Parse_Int('/DW=',MParm_Str);
  1312.     Target_Window := Parse_Int('/TW=',MParm_Str);
  1313.     IF (Switch_Win_Id(Target_Window) and Switch_Win_Id(Data_Window)) THEN
  1314.         Tof;
  1315.         Reg_exp_stat := True;
  1316.         IF (Search_Fwd('%|12' + Parse_Str('/HPT=',MParm_Str) + '$',0)) THEN
  1317.             IF (Parse_Int('/NOHPT=',MParm_Str)) THEN
  1318.                 Down;
  1319.             ELSE
  1320.                 Eol;
  1321.             END;
  1322.             Block_Begin;
  1323.             IF (Search_Fwd('%{@*@*@*@*START@*@*@*@*}||{|12}',0) = 0) THEN
  1324.                 Eof;
  1325.             END;
  1326.             IF (Parse_Int('/R=',Mparm_Str)) THEN
  1327.                 IF (Search_Fwd('%|12',0) = False) THEN
  1328.                     Eof;
  1329.                 END;
  1330.             END;
  1331.             IF (Cur_Char = '|12') THEN
  1332.                 Up;
  1333.             END;
  1334.             Block_End;
  1335.             Tint := Cur_Window;
  1336.             IF (Switch_Win_Id(Target_Window)) THEN
  1337.                 WIndow_Copy(Tint);
  1338.             END;
  1339.         END;
  1340.     ELSE
  1341.         Error_Level := 10000;
  1342.     END;
  1343. END_MACRO;
  1344.  
  1345. $MACRO 400_500Install TRANS DUMP;
  1346.     RM('MEERROR^MessageBox /B=1/M=To perform the version 4.0 to 5.0 conversion, you will need to run the macro 400_500.');
  1347. END_MACRO;
  1348.