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 / START-GO.SRC < prev    next >
Text File  |  1986-10-11  |  10KB  |  368 lines

  1. copy "PARMS.LIB";
  2. video.system.start.up.routine:
  3. begin
  4. {---------------------------------------------------
  5. {    Video Management System
  6. {    Video System Start-up Routine
  7. {    Copyright (C) 1983 by Para-Soft
  8. {    All Rights Reserved
  9. {---------------------------------------------------
  10.  
  11. copy "SYSPARMS.FIL";
  12. copy "STARTUP.FIL";
  13. copy "BOJDATA.LIB";
  14.  
  15. byte    print.char;
  16. file    print.init,
  17.         prn,
  18.         record    print.char,
  19.         text;
  20.  
  21.  
  22.  
  23. external    byte    IOBYTE        address ^h0003;
  24. external    label    entry        address ^h0005;
  25. external    word    bios.loc    address    ^h0001;
  26.  
  27. string    wk.accept    12;
  28. string    wk.str    40;
  29. string    dflt.date    9;
  30. string    alpha.date    20;
  31. word    wk.word;
  32. word    wk.rem;
  33. word    MPM.date.save;
  34. byte pointer wk.bp;
  35. word pointer wk.wp;
  36. byte    wk.byte;
  37. byte    date.entered        value    'N';
  38. byte    first.term.started    value    'N';
  39. byte    delay.flag            value    0;
  40. byte    curr.printer    value    0;
  41. string    program.to.start    81;
  42. string    command.line        128;
  43. string    command.word        81;
  44. word    end.startup.key;
  45.  
  46. record    con.tbl;
  47.     byte    con.type;
  48.     string                15;
  49.     endrec;
  50.  
  51. record    prn.tbl;
  52.     byte    prn.usage;
  53.     string                15;
  54.     endrec;
  55.  
  56. word    days.this.year;
  57.  
  58. record    month.days;
  59.     byte                value    31;    {Jan}
  60.     byte    feb.days    value    28;    {Feb}
  61.     byte                value    31;    {Mar}
  62.     byte                value    30;    {Apr}
  63.     byte                value    31;    {May}
  64.     byte                value    30;    {Jun}
  65.     byte                value    31;    {Jul}
  66.     byte                value    31;    {Aug}
  67.     byte                value    30;    {Sep}
  68.     byte                value    31;    {Oct}
  69.     byte                value    30;    {Nov}
  70.     byte                value    31;    {Dec}
  71.     endrec;
  72.  
  73. record    month.names;
  74.     field    month.name.entry    9    value    'January';
  75.     field                        9    value    'February';
  76.     field                        9    value    'March';
  77.     field                        9    value    'April';
  78.     field                        9    value    'May';
  79.     field                        9    value    'June';
  80.     field                        9    value    'July';
  81.     field                        9    value    'August';
  82.     field                        9    value    'September';
  83.     field                        9    value    'October';
  84.     field                        9    value    'November';
  85.     field                        9    value    'December';
  86.     endrec;
  87. string pointer    alpha.month.ptr    value    #month.names;
  88.  
  89. record    day.names;
  90.     field    day.name.entry    9    value    'Sunday';
  91.     field                    9    value    'Monday';
  92.     field                    9    value    'Tuesday';
  93.     field                    9    value    'Wednesday';
  94.     field                    9    value    'Thursday';
  95.     field                    9    value    'Friday';
  96.     field                    9    value    'Saturday';
  97.     endrec;
  98.  
  99. string pointer    alpha.day.ptr    value    #day.names;
  100.  
  101. record    MPM.time.responce;
  102.     word    MPM.date;
  103.     byte    MPM.hours;
  104.     byte    MPM.minutes;
  105.     byte    MPM.seconds;
  106.     endrec;
  107.  
  108. byte    curr.year;
  109. byte    curr.month;
  110. byte    curr.day;
  111. word    curr.time;
  112.  
  113. copy "TRUNCSTR.LIB";
  114. {-----------------------------------------------------------}
  115. procedure    split.wk.accept.date:
  116. begin
  117.     scan wk.accept for any "-/" giving wk.word;
  118.     unstring wk.accept to wk.word giving wk.str;
  119.     convert wk.str to curr.month;
  120.     add 1 to wk.word;
  121.     unstring wk.accept from wk.word;
  122.     scan wk.accept for any "-/" giving wk.word;
  123.     unstring wk.accept to wk.word giving wk.str;
  124.     convert wk.str to curr.day;
  125.     add 1 to wk.word;
  126.     unstring wk.accept from wk.word;
  127.     convert wk.accept to curr.year;
  128. end;
  129. {-----------------------------------------------------------}
  130.     procedure get.date.from.operator:
  131.     begin
  132.         move 'N' to date.entered;
  133.         accept wk.accept;
  134.         if wk.accept[byte] = 0 then
  135.             move dflt.date to wk.accept;
  136.         else
  137.             move "Y" to date.entered;
  138.             fi;
  139.         call split.wk.accept.date;
  140.         {---compute new date in MPM format---}
  141.         move 78 to wk.byte;
  142.         move 0 to MPM.date;
  143.         do
  144.             divide wk.byte by 4 giving wk.word remainder wk.rem;
  145.             if wk.rem    <> 0 then
  146.                 move 365 to days.this.year;
  147.                 move 28 to feb.days;
  148.             else
  149.                 move 366 to days.this.year;
  150.                 move 29 to feb.days;
  151.                 fi;
  152.             if wk.byte = curr.year then
  153.                 exitdo;
  154.                 fi;
  155.             add days.this.year to MPM.date;
  156.             add 1 to wk.byte;
  157.             if wk.byte >= 100 then
  158.                 move 0 to wk.byte;
  159.                 fi;
  160.             od;
  161.         if curr.month > 12
  162.         or curr.month = 0 then
  163.             display "Month overflow error";
  164.             display "Enter new date (MM/DD/YY), or return:",;
  165.             goto get.date.from.operator;
  166.             fi;
  167.         move #month.days to wk.bp;
  168.         move 1 to wk.byte;
  169.         while wk.byte < curr.month do
  170.             add @wk.bp to MPM.date;
  171.             add 1 to wk.bp;
  172.             add 1 to wk.byte;
  173.             od;
  174.         if curr.day = 0
  175.         or curr.day > @wk.bp then
  176.             display "Day overflow error";
  177.             display "Enter new date (MM/DD/YY), or return:",;
  178.             goto get.date.from.operator;
  179.             fi;
  180.         add curr.day to MPM.date;
  181.         call make.alpha.date;
  182.         end;
  183. {-----------------------------------------------------------}
  184.         procedure    make.alpha.date:
  185.         begin
  186.             convert curr.month to wk.str;
  187.             if wk.str[+1,byte]=0 then
  188.                 move wk.str[word] to wk.str[+1,word];
  189.                 move '0' to wk.str[byte];
  190.                 fi;
  191.             move wk.str to alpha.date;
  192.             append "/" to alpha.date;
  193.             convert curr.day to wk.str;
  194.             if wk.str[+1,byte]=0 then
  195.                 move wk.str[word] to wk.str[+1,word];
  196.                 move '0' to wk.str[byte];
  197.                 fi;
  198.             append wk.str to alpha.date;
  199.             append "/" to alpha.date;
  200.             convert curr.year to wk.str;
  201.             if wk.str[+1,byte]=0 then
  202.                 move wk.str[word] to wk.str[+1,word];
  203.                 move '0' to wk.str[byte];
  204.                 fi;
  205.             append wk.str to alpha.date;
  206.             subtract 1 from MPM.date;
  207.             divide MPM.date by 7 giving wk.word remainder wk.rem;
  208.             add 1 to MPM.date;
  209.             index day.name.entry with wk.rem giving alpha.day.ptr;
  210.             move @alpha.day.ptr[sp] to day.of.week;
  211.             subtract 1 from curr.month giving wk.byte;
  212.             index month.name.entry using wk.byte giving alpha.month.ptr;
  213.             move @alpha.month.ptr to alpha.month;
  214.         end;
  215. {----------------------------------------------------------------
  216. {    S T A R T     O F     P R O G R A M     E X E C U T I O N
  217. {
  218. {    Correct drive and user is already logged in.
  219. {----------------------------------------------------------------
  220.                     procedure    bios.con.stat:    goto bios.con.stat;
  221.                     procedure    bios.con.in:    goto bios.con.in;
  222.  
  223.  
  224.  
  225.     move IPC.area to startup.parms length ##startup.parms;
  226.  
  227.  
  228.     and my.terminal.num with ^h0f;
  229.  
  230.     {-----------------------------------
  231.     {    open the correct files
  232.     {-----------------------------------
  233.     move data.ext to sys.file.ext;
  234.  
  235.     open sys shared error begin
  236.         display "Startup Error -- System File Not Located";
  237.         goto end;
  238.         end;
  239.     move 0 to sys.key;
  240.     read sys error standard;
  241.     if s.date[+2,byte] <> '/'
  242.     or s.date[+5,byte] <> '/' then
  243.         display "Startup Error -- Invalid System File Format";
  244.         goto end;
  245.         fi;
  246.  
  247.     if operating.system = os.CPM then        {--if it's CP/M--}
  248.         move 'Y' to first.term.started;
  249.         move s.date to dflt.date;
  250.         move s.date to wk.str;
  251.         display "The current system date is:",wk.str;
  252.         display "Enter new date (MM/DD/YY), or return:",;
  253.         call get.date.from.operator;
  254.     else                            {MP/M, old n/STAR, or new n/STAR}
  255.         {---------------------------}
  256.         {    get current MPM date    }
  257.         {---------------------------}
  258. retry.MPM.date:
  259.         mcall entry using 155, #MPM.date;
  260.         move MPM.date to MPM.date.save;
  261.  
  262.         subtract 1 from MPM.date;    {--adjust for this algorithm--}
  263.  
  264.         move 78 to curr.year;
  265.         move 1 to curr.month;
  266.         move 1 to curr.day;
  267.         do
  268.             divide curr.year by 4 giving wk.word remainder wk.rem;
  269.             if wk.rem    <> 0 then
  270.                 move 365 to days.this.year;
  271.                 move 28 to feb.days;
  272.             else
  273.                 move 366 to days.this.year;
  274.                 move 29 to feb.days;
  275.                 fi;
  276.             if MPM.date < days.this.year then
  277.                 exitdo;
  278.                 fi;
  279.             subtract days.this.year from MPM.date;
  280.             add 1 to curr.year;
  281.             if curr.year >= 100 then
  282.                 move 0 to curr.year;
  283.                 fi;
  284.             od;
  285.         move #month.days to wk.bp;
  286.         while MPM.date >= @wk.bp do
  287.             subtract @wk.bp from MPM.date;
  288.             add 1 to wk.bp;
  289.             add 1 to curr.month;
  290.             if curr.month > 12 then
  291.                 display "month overflow";
  292.                 fi;
  293.             od;
  294.         add MPM.date to curr.day;
  295.         move MPM.date.save to MPM.date;
  296.  
  297.         call make.alpha.date;
  298.         move s.date to wk.str;
  299.         if delay.flag = 0 then
  300.             display "Current system date = ",wk.str;
  301.             fi;
  302.         move wk.str to dflt.date;
  303.         {-------------------------------------------------------}
  304.         {    If MPM-date is the same as the video-system date    }
  305.         {    assume that the date is set correctly, and start-up    }
  306.         {-------------------------------------------------------}
  307.         move alpha.date[+6,field,length 2] to wk.str;
  308.         read sys error standard;
  309.         if wk.str < '83'
  310.         or alpha.date <> s.date then
  311.             if delay.flag = 0 then
  312.                 display "Enter new date (MM/DD/YY), or return:",;
  313.                 move ^hff to delay.flag;
  314.                 fi;
  315.             mcall entry using 11 giving wk.byte;
  316.             if wk.byte = 0 then
  317.                 mcall entry using 141,20;    {-delay 1/3 sec-}
  318.                 goto retry.MPM.date;
  319.                 fi;
  320.             call get.date.from.operator;
  321. {            accept "Enter time (HHMM):",wk.accept;
  322. {            convert hex wk.accept to curr.time;
  323. {            move curr.time[byte]    to MPM.minutes;
  324. {            move curr.time[+1,byte]    to MPM.hours;
  325.             mcall entry using 104,#MPM.date;
  326.             move 'Y' to first.term.started;
  327.             fi;
  328.         call make.alpha.date;
  329.         fi;
  330.     {-------------------------------}
  331.     {    set new date in system file    }
  332.     {-------------------------------}
  333.     move 0 to sys.key;
  334.     read sys lock error standard;
  335.     move alpha.date to s.date;
  336.     write sys unlock error standard;
  337.     close sys error standard;
  338.     {-------------------------------}
  339.     {    Set Job start-up parameters    }
  340.     {-------------------------------}
  341.     move alpha.date to todays.date;
  342.     move @alpha.month.ptr to wk.str length ##month.name.entry;
  343.     move 0 to wk.str[byte,+##month.name.entry];
  344.     scan wk.str for trailing ' ' giving address wk.bp;
  345.     move 0 to @wk.bp;
  346.     if first.term.started <> "Y"
  347.     and operating.system <> os.CPM then
  348.         display "";
  349.         fi;
  350.     display "The month is ",wk.str,;
  351.     move @alpha.day.ptr to wk.str length ##day.name.entry;
  352.     move 0 to wk.str[byte,+##day.name.entry];
  353.     scan wk.str for trailing ' ' giving address wk.bp;
  354.     move 0 to @wk.bp;
  355.     display ".   The day is ",wk.str,".   The date is ",alpha.date;
  356.     {--program.to.execute is passed in startup.acct--}
  357.     move startup.acct to wk.str;
  358.     move " " to startup.acct;
  359.     call trunc.wk.str;
  360.     move wk.str to program.to.start;
  361.     move "." to wk.str[byte];
  362.     move prog.ext to wk.str[+1];
  363.     call trunc.wk.str;
  364.     append wk.str to program.to.start;
  365.     move startup.parms[field] to IPC.area;
  366.     execute program.to.start;
  367. end;
  368.