home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / PARASOL / VIDEOSTO.ARK / STARTUP.SRC < prev    next >
INI File  |  1986-07-21  |  10KB  |  339 lines

  1. [limit word number address map mpm table]
  2. master.first.phase.start:
  3. begin
  4. {---------------------------------------------------
  5. {    Medical Office Management System 'PARAMEDIC'
  6. {    Master Start Routine
  7. {        This program sets the system environment for Para-Soft
  8. {        Application Programs.  This includes selecting the
  9. {        appropriate drive and user, and executing "STARTUP"
  10. {    Copyright (C) 1983 by Para-Soft
  11. {    All Rights Reserved
  12. {---------------------------------------------------
  13.  
  14. copy "STARTUP.FIL";
  15. copy "BOJDATA.LIB";
  16.  
  17. byte    print.char;
  18. file    print.init,
  19.         prn,
  20.         record    print.char,
  21.         text;
  22.  
  23.  
  24.  
  25. external    byte    IOBYTE        address ^h0003;
  26. external    label    entry        address ^h0005;
  27. external    word    bios.loc    address    ^h0001;
  28.  
  29. string    wk.accept    12;
  30. string    wk.str    40;
  31. word    wk.word;
  32. word    wk.rem;
  33. word    wk.count    value    0;
  34. word pointer    wk.count.ptr    value    #wk.count;
  35. byte pointer wk.bp;
  36. word pointer wk.wp;
  37. byte    wk.byte;
  38. byte    curr.printer    value    0;
  39. string    program.to.start    81;
  40. string    command.line        128;
  41. string    command.word        81;
  42. word    end.startup.key;
  43.  
  44. record    con.tbl;
  45.     byte    con.type;
  46.     string                15;
  47.     endrec;
  48.  
  49. record    prn.tbl;
  50.     byte    prn.usage;
  51.     string                15;
  52.     endrec;
  53.  
  54. word    days.this.year;
  55.  
  56.  
  57.  
  58.  
  59. copy "TRUNCSTR.LIB";
  60.  
  61.  
  62.  
  63.  
  64. {-----------------------------------------------------------
  65. procedure    get.current.printer:
  66. begin
  67.     switch on operating.system:
  68.         1,3: begin
  69.             mcall entry using 156 giving wk.bp;
  70.             add 14 to wk.bp;
  71.             divide @wk.bp by 16 giving curr.printer;
  72.             end;
  73.         else
  74.             divide IOBYTE by ^h40 giving curr.printer;
  75.         endswitch;
  76. end;
  77. {----------------------------------------------------------------
  78. {    S T A R T     O F     P R O G R A M     E X E C U T I O N
  79. {
  80. {    Get command-line and process.  Format:
  81. {
  82. {    STARTUP [[ID [=]] xxx ] [ progname [ command-line ]]
  83. {
  84. {    Examples:
  85. {        STARTUP                            Uses blank id, dflt prog
  86. {        STARTUP VERIFY                    Uses blank id, prog=VERIFY
  87. {        STARTUP MED                        Uses id=MED, dflt prog
  88. {        STARTUP ID=DNT                    Uses id=DNT, dflt prog
  89. {        STARTUP ID=JOE REBUILD ALL        Uses id=JOE, prog=REBUILD,
  90. {                                            cmd-line=ALL
  91. {
  92. {----------------------------------------------------------------
  93.                     procedure    bios.con.stat:    goto bios.con.stat;
  94.                     procedure    bios.con.in:    goto bios.con.in;
  95.  
  96.                     procedure    get.cmd.word:
  97.                     begin
  98.                         scan command.line for any " ,=~09~"
  99.                             giving address wk.bp;
  100.                         move @wk.bp to wk.byte;
  101.                         move 0 to @wk.bp;
  102.                         move command.line to command.word;
  103.                         if wk.byte <> 0 then
  104.                             add 1 to wk.bp;
  105.                             fi;
  106.                         scan @wk.bp[sp] for no " ,=~09~"
  107.                             giving address wk.bp;
  108.                         move @wk.bp[sp] to command.line;
  109.                         end;
  110.  
  111.  
  112.     move IPC.area to command.line;
  113.     convert command.line to upper case;    {-for IBM-PC Baby-Blue-}
  114.     {----------------------------
  115.     {    Find out if MPM or CPM
  116.     {----------------------------
  117.     mcall entry using 12 giving wk.word;
  118.     switch on wk.word:
  119.         ^h0022:        move os.CPM            to operating.system;
  120.         ^h0130:        move os.MPM            to operating.system;
  121.         ^h01fe:        move os.old.NSTAR    to operating.system;
  122.         ^h01ff:        move os.new.NSTAR    to operating.system;
  123.         endswitch;
  124.     {----------------------------------
  125.     {    Determine computer-type
  126.     {----------------------------------
  127.     if operating.system = os.MPM then
  128.         move ALTOS.computer to computer.type;
  129.     else
  130.         switch on bios.loc[+1,byte]:
  131.         ^he6:    move BB2.computer to computer.type;
  132.         ^hf2:    move EXO.computer to computer.type;
  133.         endswitch;
  134.         fi;
  135.     {----------------------------------------------------
  136.     {    get terminal number for multi-terminal systems
  137.     {----------------------------------------------------
  138.     if operating.system = os.CPM then        {--if it's CP/M--}
  139.         move 0 to my.terminal.num;
  140.     else                        {MP/M, old n/STAR, new n/STAR}
  141.         mcall entry using 153 giving ,,,my.terminal.num;
  142.         fi;
  143.     {------------------------------
  144.     {    process the command-line
  145.     {------------------------------
  146.     scan command.line for no " " giving address wk.bp;
  147.     move @wk.bp[sp] to command.line;
  148.     move '   ' to company.id;
  149.     call get.cmd.word;
  150.     if command.word = 'ID' then
  151.         call get.cmd.word;
  152.         size command.word giving wk.word;
  153.         if wk.word > 3 then
  154.             display "Id can't be over 3 characters.";
  155.             goto end;
  156.             fi;
  157.         move command.word to company.id;
  158.         call get.cmd.word;
  159.         size command.word giving wk.word;
  160.         if wk.word <= 8 then
  161.             move command.word to program.to.start;
  162.         else
  163.             append command.line to command.word;
  164.             move command.word to command.line;
  165.             fi;
  166.     else
  167.         size command.word giving wk.word;
  168.         if wk.word <> 0
  169.         and wk.word <= 3 then
  170.             move command.word to company.id;
  171.             call get.cmd.word;
  172.             size command.word giving wk.word;
  173.             if wk.word <= 8 then
  174.                 move command.word to program.to.start;
  175.             else
  176.                 append command.line to command.word;
  177.                 move command.word to command.line;
  178.                 fi;
  179.         else
  180.             if wk.word <= 8
  181.             and wk.word <> 0 then
  182.                 move command.word to program.to.start;
  183.             else
  184.                 append command.line to command.word;
  185.                 move command.word to command.line;
  186.                 fi;
  187.             fi;
  188.         fi;
  189.     move command.line to startup.cmd.line;
  190.     {-------------------------------------------------
  191.     {    Get Terminal type
  192.     {-------------------------------------------------
  193.     mcall entry using 14,0;
  194.     mcall entry using 32,0;
  195.     open startup.file shared error begin
  196.         display "Internal Error, Can't Locate Startup Parameters";
  197.         goto end;
  198.         end;
  199.     move 0 to startup.key;
  200.     read startup.file error begin
  201.         display "Internal Error: Invalid Startup Information";
  202.         goto end;
  203.         end;
  204.     move startup.con.tbl    to con.tbl;
  205.     move startup.nxt to end.startup.key;
  206.     move my.terminal.num to wk.str[word];
  207.     or wk.str[byte] with '0';
  208.     display "This is terminal #",wk.str;
  209.     and my.terminal.num with ^h0f giving wk.byte;
  210.     index con.type with wk.byte giving wk.bp;
  211.     move @wk.bp to my.terminal.type;
  212.     {-------------------------------------------------
  213.     {    Go thru Startup-File and Match on Company-ID
  214.     {-------------------------------------------------
  215. retry.co.id.lookup:
  216.     move (17 - 1) to startup.key;
  217.     while startup.key < end.startup.key do
  218.         add 1 to startup.key;
  219.         read startup.file error standard;
  220.         od until startup.co.code = company.id;
  221.     if startup.co.code <> company.id then
  222.         display "There is no ID-Code on file for '",;
  223.         move company.id to wk.str;
  224.         display wk.str,"'";
  225.         accept "Enter new ID or 'END': ",wk.str;
  226.         convert wk.str to upper case;
  227.         move 0 to wk.str[+3,byte];
  228.         if wk.str = 'END' then
  229.             goto end;
  230.             fi;
  231.         move wk.str to company.id;
  232.         goto retry.co.id.lookup;
  233.         fi;
  234.     close startup.file error standard;
  235.     {--------------------------------------------------
  236.     {    Check if this terminal is allowed on this ID
  237.     {--------------------------------------------------
  238.     and my.terminal.num with ^h0f giving wk.byte;
  239.     index startup.con.valid with wk.byte giving wk.bp;
  240.     if @wk.bp <> 'Y' then
  241.         display "This Terminal is not declared for this ID";
  242.         goto end;
  243.         fi;
  244.     move 0 to wk.byte;
  245.     move #startup.con.valid.rec to wk.bp;
  246.     while wk.byte < ##startup.con.valid.rec do
  247.         if @wk.bp = 'Y' then
  248.             move wk.byte to max.terminal.num;
  249.             fi;
  250.         add 1 to wk.bp;
  251.         add 1 to wk.byte;
  252.         od;
  253.     {--------------------------------------------------
  254.     {    Get password if needed (Use BIOS calls for no echo)
  255.     {--------------------------------------------------
  256.     if startup.password <> ' ' then
  257.         display "";
  258.         display "Enter Password Below:";
  259.         display "MMMMMMMM~0d~WWWWWWWW~0d~XXXXXXXX~0d~",;
  260.         add 3 to bios.loc giving bios.con.stat[+1,word];
  261.         add 6 to bios.loc giving bios.con.in[+1,word];
  262.         do
  263.             mcall bios.con.stat giving ,,,wk.byte;
  264.             if wk.byte = 0 then
  265.                 exitdo;
  266.                 fi;
  267.             mcall bios.con.in;    {--throw away--}
  268.             od;
  269.         move #wk.str to wk.bp;
  270.         move 0 to wk.count;
  271.         do
  272.             mcall bios.con.in giving ,,,wk.byte;
  273.             and wk.byte with ^h7f;
  274.             if wk.byte >= 'a'
  275.             and wk.byte <= 'z' then
  276.                 add ("A"-'a') to wk.byte;
  277.                 fi;
  278.             if wk.byte = ^h0d then
  279.                 exitdo;
  280.                 fi;
  281.             move wk.byte to @wk.bp;
  282.             add 1 to wk.bp;
  283.             add 1 to wk.count;
  284.             od until wk.count >= ##startup.password;
  285.         move 0 to @wk.bp;
  286.         if wk.str <> startup.password then
  287.             display "";
  288.             display "Invalid Password";
  289.             goto end;
  290.             fi;
  291.         fi;
  292.     move startup.co.code        to company.id;
  293.     move startup.prog.ext        to prog.ext;
  294.     move startup.data.ext        to data.ext;
  295.     move startup.prog.drive        to prog.drive;
  296.     move startup.data.drive        to data.drive;
  297.     move startup.backup.drive    to backup.drive;
  298.     move startup.sort.drive        to sort.drive;
  299.     move startup.user            to prog.user;
  300.  
  301.  
  302.     call get.current.printer;
  303.     move curr.printer to default.printer;
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.     and my.terminal.num with ^h0f;
  311.     {-------------------------------------------------------------
  312.     {    Log onto the Drive & User Specified for this Company-ID
  313.     {-------------------------------------------------------------
  314. {*debug*    convert prog.user to wk.str;
  315. {*debug*    display "Changing to User # ",wk.str;
  316.     mcall entry using 32,prog.user;
  317. {*debug*    move prog.drive to wk.str[word];
  318. {*debug*    display "Changing to Drive ",wk.str,":";
  319.     subtract "A" from prog.drive giving wk.byte;
  320.     mcall entry using 14,wk.byte;
  321.  
  322. {*debug*    display "Starting  ID='",;
  323. {*debug*    move company.id to wk.str;
  324. {*debug*    display wk.str,"'";
  325.     if program.to.start = "" then
  326.         move startup.dflt.prog to program.to.start;
  327.         fi;
  328.     move program.to.start to startup.acct;
  329.     move "START-GO" to program.to.start;
  330.     move '.' to wk.str[byte];
  331.     move prog.ext to wk.str[+1];
  332.     call trunc.wk.str;
  333.     append wk.str to program.to.start;
  334.  
  335.     move startup.parms[field] to IPC.area;
  336. {*debug*    display "Executing ",program.to.start;
  337.     execute program.to.start;
  338. end;
  339.