home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / turbopas / paslib.arc / PASLIB01.DOC next >
Text File  |  1986-05-22  |  24KB  |  507 lines

  1.  A. Introduction
  2.          The following is the documentation for the subprogram
  3.     library PASLIB01.INC which is now placed in the public
  4.     domain.
  5.  
  6.     CAVEAT:   much of this library is IBM and PC DOS specific.
  7.     It has been tested on both an IBM PC-1 and an IBM PC/AT with
  8.     monochrome, CGA, EGA, and Hercules boards but there are no
  9.     guarantees for any other machines.
  10.  
  11.          Any comments or suggestions will be appreciated.
  12.  
  13.                    Robert B. Wooster
  14.                    (203) 227-5588
  15.                    (212) 310-5222
  16.                    CIS: 72415,1602
  17.  
  18.                         Version 1 released 22 May 1986
  19.  
  20.  B. Global Declarations
  21.     1. Constants
  22.        a) IsColor
  23.                a boolean set by InitMonitor depending upon whether the
  24.                machines switches are set for monochrome or color.
  25.                Also used in SwapMonitors, q.v.
  26.        b) MaxRow, MaxCol should be self-evident
  27.        c) Video attributes:
  28.                LO_V: low video, HI_V high (or normal) video,
  29.                RE_V: reverse video
  30.        d) Special key scan codes
  31.                for the use of these constants see the functions ugetc
  32.                and NextField
  33.           1) cursor control keys
  34.              SK_HM: Home    SK_UP: up      SK_PU: PgUp
  35.              SK_LE: left                   SK_RI: right
  36.              SK_EN: End     SK_DN: down    SK_PD: PgDn
  37.              SK_IN: Ins                    SK_DE: Del
  38.           2) function keys
  39.              SK_F1 to SK_F0
  40.           3) the Esc key : E_S_C
  41.     2. Types
  42.        a) chrset
  43.        b) string80:  used as standard string type in most of the
  44.                     routines
  45.        c) bigstring: for use when string80 isn't enough
  46.        d) regtype:   fairly standard register declaration for use in
  47.                     DOS function calls
  48.        e) datetype:  a standard date type to handle dates from 1/2/60
  49.                     to 12/31/2050
  50.        f) timetype:  a standard type for handling times
  51.        g) scrntype & scrnptr: used in SaveScrn and RestoreScrn
  52.     3. Variables
  53.        a) EquipFlag: the location of the equipment flag set by POST on
  54.           IBM PCs
  55.        b) MonoScrn & ColorScrn: the addresses of the monochrome and CGA
  56.           screens
  57.        c) KeyStat: the key status byte used by the keyboard routines
  58.        d) SavedScrn: used by SaveScrn & RestoreScrn, q.v.
  59.        e) SplKey: a flag used by the keyboard input routines, q.v.
  60.        f) sdt: the current date according to the machine's clock;
  61.                initialized in InitSys
  62.        g) out: used by WhereOut, q.v.
  63.        h) To_LST: see WhereOut
  64.        i) EscFlag: see ugetc
  65.  C. Hardware control functions
  66.     1. InitMonitor    procedure
  67.        a) function:      sets IsColor flag according to the switch
  68.                          setting at EquipFlag
  69.        b) syntax:        InitMonitor;
  70.        c) returns:       nothing
  71.        d) side effects:  sets IsColor flag
  72.        e) notes:         EquipFlag is set during boot according to the
  73.                          hardware switch settings.  In a two monitor
  74.                          system this means that the monochrome monitor
  75.                          will come up.  EquipFlag can, however, be
  76.                          reset by some external programs such as Bob
  77.                          Starr's UTIL.EXE.
  78.     2. SwapMonitors   procedure
  79.        a) function:      this is to allow two monitor systems to move
  80.                          back and forth between the monochrome and
  81.                          color monitors.
  82.        b) Syntax:        SwapMonitors;
  83.        c) returns:       nothing
  84.        d) side effects:  resets EquipFlag, and IsColor to their
  85.                          opposite monitor settings
  86.        e) notes:         if you return to the Turbo editor after
  87.                          switching monitors an odd number of times,
  88.                          the results can be unpredictable, i.e. your
  89.                          machine will more or less hang.
  90.     3. SaveScrn       procedure
  91.        a) function:      saves current screen           
  92.        b) syntax:        SaveScrn
  93.        c) returns:       nothing
  94.        d) side effects:  moves screen contents to savedscrn
  95.        e) notes:         used with restorescrn
  96.        f) calls:         nothing
  97.     4. RestoreScrn    procedure
  98.        a) function:      restores saved screen           
  99.        b) syntax:        RestoreScrn
  100.        c) returns:       nothing
  101.        d) side effects:  moves saved screen to current screen
  102.        e) notes:         used with savescrn
  103.        f) calls:         nothing
  104.     5. InitSystem     procedure
  105.        a) function:      initialize system to standard
  106.                          setup           
  107.        b) syntax:        InitSystem;
  108.        c) returns:       nothing
  109.        d) side effects:  IsColor flag and sdt are set and the standard
  110.           window configuration (Sec. G) is initialized
  111.        e) notes:         See TEMPLATE.PAS for an example of its use
  112.        f) calls:         InitMonitor, InitWindows, SysDate
  113.  D. Low-level Screen I/O
  114.     1. ugetc     character function
  115.        a) function:      get a character from the keyboard without
  116.                          echo but with several side effects
  117.        b) syntax         c := ugetc;
  118.        c) returns        the character typed
  119.        d) side effects
  120.           1) if Control-C is typed the program halts
  121.           2) if a special key, i.e. a function or cursor control key, is
  122.              typed, a null character is returned and the global variable
  123.              SplKey is set to that key's scan code
  124.        e) notes:         this is the workhorse of the input functions
  125.                          discussed in section D
  126.     2. putc      procedure
  127.        a) function:      put a character on the screen with a
  128.                          specified attribute at the current cursor
  129.                          position
  130.        b) syntax         putc(c,b) where c is a character and b is an
  131.                                    attribute byte.
  132.        c) returns        nothing
  133.        d) side effects   none, but note that the cursor is not moved
  134.        e) notes:         uses direct screen addressing
  135.     3. aputc     procedure
  136.        a) function:      put a character c on the screen with
  137.                          attribute b at column x and row y
  138.        b) syntax         aputc(c,b,x,y)
  139.        c) returns        nothing
  140.        d) side effects   none, but note that the cursor is not moved
  141.        e) notes:         uses direct screen addressing
  142.  E. Data I/O
  143.     1. GetUC     character function
  144.        a) function:      get an upper case character from the
  145.                          keyboard if it is in OKSet, otherwise ring
  146.                          bell until a character in OKSet is typed
  147.        b) syntax         c := GetUC(default, OKSet)
  148.        c) returns        an upper case character
  149.        d) side effects   same as ugetc
  150.        e) notes:         useful for menu selections
  151.        f) calls:         ugetc
  152.     2. PutString procedure
  153.        a) function:      put a string on the CRT at the indicated
  154.                          position
  155.        b) syntax         PutString(s,x,y)
  156.        c) returns        nothing
  157.        d) side effects   none
  158.        e) notes:         writes a string80 but $V- parameter permits
  159.                          sending any string
  160.     3. GetString procedure
  161.        a) function:      get a string from the keyboard
  162.        b) syntax:        GetString(s1,len,x,y,s2)
  163.                               where s1 is the string returned as a
  164.                               side effect
  165.                           len is the maximum length of the string
  166.                           x,y are the screen coordinates
  167.                           s2 is the default string or ''    
  168.        c) returns:       nothing
  169.        d) side effects:  If a string has been typed it is returned in
  170.                          s1. If no string typed before a special
  171.                          function key or <Enter> is typed s2 is
  172.                          returned as s1. If a special function key is
  173.                          pressed the global variables are set.
  174.  
  175.        e) notes:         The function terminates after len characters
  176.                          have been entered.
  177.                          <Esc> clears an unfinished entry and lets you
  178.                          start over
  179.        f) calls:         ugetc, PutString
  180.     4. PutInteger     procedure
  181.        a) function:      put an integer on the screen at x,y
  182.        b) syntax:        PutInteger(i,x,y,len)
  183.        c) returns:       nothing
  184.        d) side effects:  none
  185.        e) notes:
  186.        f) calls:         PutString
  187.     5. GetInteger     procedure
  188.        a) function:      get an integer from the keyboard
  189.        b) syntax:        GetInteger(i1,x,y,len,min,max,i2)
  190.                               where i1 is the integer returned
  191.                                x,y are the screen coordinates
  192.                                len is the maximum length
  193.                                min is the minimum acceptable value
  194.                                max is the maximum acceptable value
  195.                                i2 is the default value
  196.        c) returns:       nothing
  197.        d) side effects:  the entered value in i2 plus the same other
  198.                          side effects as GetString
  199.        e) notes:         the NumLock is set upon entering this
  200.                          function and released upon exit
  201.        f) calls:         GetString, PutInteger
  202.     6. Format    string function
  203.        a) function:      format a number with parentheses and commas
  204.        b) syntax:        s := Format(r,i,j)
  205.        c) returns:       s as a string of length i representing a
  206.                          number to j decimal places with imbedded
  207.                          commas and parens if negative.
  208.        d) side effects:  none
  209.        e) notes:         use for pretty-printing output
  210.        f) calls:
  211.     7. PutNumber procedure
  212.        a) function:      put a real number on CRT at x,y with length i
  213.                          and j decimal places
  214.        b) syntax:        PutNumber(r,i,j,x,y)
  215.        c) returns:       nothing
  216.        d) side effects:  none
  217.        e) notes:         results are unpredictable if number has more
  218.                          than i digits
  219.        f) calls:         nothing
  220.     8. GetNumber procedure
  221.        a) function:      get a real number from the keyboard
  222.        b) syntax:        GetInteger(r1,x,y,i,j,min,max,r2)
  223.                               where r1 is the integer returned
  224.                                x,y are the screen coordinates
  225.                                i is the maximum length
  226.                                j is the # of decimals
  227.                                min is the minimum acceptable value
  228.                                max is the maximum acceptable value
  229.                                r2 is the default value
  230.        c) returns:       nothing
  231.        d) side effects:  the entered value in r1 plus the same other
  232.                          side effects as GetString
  233.        e) notes:         the NumLock is set upon entering this
  234.                          function and released upon exit
  235.        f) calls:         GetString, PutNumber
  236.     9. PutDate   procedure
  237.        a) function:      put a date on the CRT in the form mm/dd/yy
  238.        b) syntax:        PutDate(date,x,y);
  239.        c) returns:       nothing
  240.        d) side effects:  none
  241.        e) notes:
  242.        f) calls:
  243.    10. GetDate   procedure
  244.        a) function:      get a legal date form the keyboard
  245.        b) syntax:        GetDate(date1,x,y,date2)
  246.                               where:    date1 is the date returned
  247.                                         x,y are the screen coordinates
  248.                                         date2 is the default date
  249.        c) returns:       nothing
  250.        d) side effects:  date entered in date1
  251.        e) notes:         NumLock is set upon entering this procedure
  252.                          and cleared upon exit.
  253.                          ANY character may be used as a delimiter
  254.                          If no year is given the current year is
  255.                          assumed
  256.                          Dates must be between 1/1/1960 and
  257.                          12/31/2059, the appropriate century is
  258.                          assumed.
  259.        f) calls:         GetString
  260.    11. Heading   procedure
  261.        a) function:      put a string on the heading line
  262.        b) syntax:        Heading(string)
  263.        c) returns:       nothing
  264.        d) side effects:  prints a message centered on line 1
  265.        e) notes:         see above
  266.        f) calls:         MainWdo, aputc
  267.    12. Wait      procedure
  268.        a) function:      wait for any key to be pressed
  269.        b) syntax:        Wait;
  270.        c) returns:       nothing
  271.        d) side effects:  none
  272.        e) notes:         prints "Press any key to continue" on the
  273.                          message line and waits for it.  An
  274.                          improvement over REPEAT UNTIL KeyPressed
  275.                          because it throws away the key that was
  276.                          pressed.
  277.        f) calls:         HelpWdo, MainWdo
  278.    13. ShowHelp  procedure
  279.        a) function:      Display a message on the message
  280.                          line           
  281.        b) syntax:        ShowHelp(string)
  282.        c) returns:       nothing
  283.        d) side effects:  none
  284.        e) notes:         Use for explanatory messages
  285.        f) calls:         HelpWdo, MAinWdo
  286.    14. Prompt    character function
  287.        a) function:      a variation on the UCSD standard prompt such
  288.                          as "C)ompile, E)dit, F)ile, R)un ?"
  289.        b) syntax:        c := Prompt(string, default);
  290.        c) returns:       character c
  291.        d) side effects:  none
  292.        e) notes:         any capitalized character in string is a
  293.                          valid response.
  294.        f) calls:         HelpWdo, MainWdo, GetUC
  295.  F. Date Manipulation
  296.     1. Jul       integer function
  297.        a) function:      calculate pseudo-Julian number from date
  298.        b) syntax:        i := Jul(date)
  299.        c) returns:       returns pseudo-Julian as an integer
  300.        d) side effects:  none
  301.        e) notes:         the algorithm first calculates the true
  302.                          Julian number as a real and then subtracts
  303.                          the Julian number for 1/1/60.  This insures
  304.                          that the number will be an integer over the
  305.                          range of datetype.  Based on a FORTRAN
  306.                          one-liner fount in the HP-41 user library.
  307.        f) calls:         None.
  308.     2. JtoD      procedure
  309.        a) function:      convert a pseudo-Julian number to a datetype
  310.        b) syntax:        JtoD(i, date);
  311.        c) returns:       nothing
  312.        d) side effects:  returns date as a side effect
  313.        e) notes:         See Jul; this just reverses the process
  314.        f) calls:         none
  315.     3. J30       integer function
  316.        a) function:      Does the equivalent of Jul except following
  317.                          a 30-day month convention.
  318.        b) syntax:        i := J30(date)
  319.        c) returns:       a 30-day equivalent pseudo-Julian number
  320.        d) side effects:  none
  321.        e) notes:         See Jul.
  322.        f) calls:         nothing
  323.     4. LegalDate procedure
  324.        a) function:      checks to see if a date is a legal
  325.                          date, i.e., not June 31, and if it
  326.                          is, fixes it           
  327.        b) syntax:        LegalDate(date);
  328.        c) returns:       nothing
  329.        d) side effects:  if date is corrected, the corrected date
  330.                          is returned, else the original date is
  331.                          returned
  332.        e) notes:         can be used for some input checking
  333.        f) calls:         nothing
  334.     5. mmdd      string function
  335.        a) function:      converts a date to a string of the
  336.                          form "mm/dd"
  337.        b) syntax:        s := mmdd(date);
  338.        c) returns:       string of date in the form "mm/dd"
  339.        d) side effects:  none
  340.        e) notes:         useful for printing dates
  341.        f) calls:         nothing
  342.     6. mmddyy    string function
  343.        a) function:      converts a date to a string of the
  344.                          form "mm/dd/yy"
  345.        b) syntax:        s := mmddyy(date);
  346.        c) returns:       string of date in the form "mm/dd/yy"
  347.        d) side effects:  none
  348.        e) notes:         useful for printing dates
  349.        f) calls:         nothing
  350.     7. DayofWeek integer function
  351.        a) function:      find the day of the week from a date
  352.        b) syntax:        i := DayOfWeek(date);
  353.        c) returns:       an integer with 0 representing Monday and 6
  354.                          representing Sunday
  355.        d) side effects:  none
  356.        e) notes:         used by NextBDay
  357.        f) calls:         Jul
  358.     8. NextBDay  procedure
  359.        a) function:      find the next weekday after a date           
  360.        b) syntax:        NextBDay(date1,date2)
  361.        c) returns:       nothing
  362.        d) side effects:  date2 is the next business or week day after
  363.                          date1
  364.        e) notes:         used for some investment calculations
  365.        f) calls:         DayofWeek, JtoD, jul
  366.     9. AddMonths procedure
  367.        a) function:      add n months to a date     
  368.        b) syntax:        AddMonths(date1,n,date2)
  369.        c) returns:       nothing
  370.        d) side effects:  date2 is n months from date1
  371.        e) notes:         very useful for bond calculations but
  372.                          admittedly a little kludgey
  373.        f) calls:         nothing
  374.    10. DayCount integer function
  375.        a) function:      return days between two dates
  376.        b) syntax:        i := DayCount(date1, date2)
  377.        c) returns:       number of days between two dates
  378.        d) side effects:  none
  379.        e) notes:         I was doing this so often in programs I
  380.                          decided to make it a function.  The order of
  381.                          the dates is irrelevant; the absolute value
  382.                          of the dates is returned.
  383.        f) calls:         Jul
  384.    11. DatesEqual     boolean function
  385.        a) function:      test for the equality of two dates
  386.        b) syntax:        Boolean := DatesEqual(date1, date2);
  387.        c) returns:       TRUE if date1 equals Date2, false otherwise
  388.        d) side effects:  none
  389.        e) notes:         why can't Pascal test for equality of
  390.                          records?
  391.        f) calls:         nothing
  392.    12. NullDate       procedure
  393.        a) function:      sets a date to 1/1/60     
  394.        b) syntax:        NullDate(date)
  395.        c) returns:       nothing
  396.        d) side effects:  date is set to 1/1/60, which may be used as a
  397.                          null
  398.        e) notes:         used to test if a date record is initialized;
  399.                          may also be used to force no default in
  400.                          GetDate
  401.        f) calls:         nothing
  402.  G. Window Support
  403.          My standard display uses the first line as a header and
  404.     the last line as a message line.  The active window then
  405.     becomes rows 2 through 24.  Both the header and the message
  406.     line are in reverse video.  The procedures InitWindows,
  407.     MainWdo, and HelpWdo manage this
  408.     1. InitWindows    procedure
  409.        a) function:      set up standard windows           
  410.        b) syntax:        InitWindows
  411.        c) returns:       nothing
  412.        d) side effects:  CRT lines 1 and 25 are set to reverse video
  413.                          and the active window is set to 1,2;80,24
  414.        e) notes:         see above
  415.        f) calls:         MainWdo, aputc
  416.     2. MainWdo   procedure
  417.        a) function:      set the active window to 1,2;80,24     
  418.        b) syntax:        MainWdo
  419.        c) returns:       nothing
  420.        d) side effects:  sets the active window to 1,2;80,24
  421.        e) notes:         see above
  422.        f) calls:         nothing
  423.     3. HelpWdo   procedure
  424.        a) function:      set the active window to the message
  425.                          line     
  426.        b) syntax:        HelpWdo
  427.        c) returns:       nothing
  428.        d) side effects:  sets the active window to 1,1;80,25
  429.        e) notes:         sets the cursor at 1,25
  430.        f) calls:         nothing
  431.     4. UseWdo    procedure
  432.        a) function:      creates a window for i/o
  433.        b) syntax:        UseWdo(x,y,col,row,string);
  434.        c) returns:       nothing
  435.        d) side effects:  see notes
  436.        e) notes:         creates a window with the upper left corner
  437.                          at x,y, col wide and row high.  If possible,
  438.                          draws a box around the window.  String is
  439.                          inserted in the row above the window.  The
  440.                          window is cleared.
  441.        f) calls: aputc
  442.     5. CloseWdo  procedure
  443.        a) function:      restores MainWdo after a call to UseWdo
  444.        b) syntax:        CloseWdo;
  445.        c) returns:       nothing
  446.        d) side effects:  none
  447.        e) notes:         used to cancel effect of UseWdo.  It does
  448.                          not, however, clear the screen.  To do that
  449.                          use the window save and restore functions.
  450.        f) calls:         MainWdo
  451.  H. System Services
  452.     1. SysDate   procedure
  453.        a) function:      gets the date from the system clock
  454.        b) syntax:        SysDate(date);
  455.        c) returns:       nothing
  456.        d) side effects:  date is initialized to whatever date the
  457.                          computer's clock says it is
  458.        e) notes:         
  459.        f) calls:
  460.     2. SysTime   procedure
  461.        a) function:      gets the time from the system
  462.                          clock           
  463.        b) syntax:        SysTime(time)
  464.        c) returns:       nothing
  465.        d) side effects:  time is initialized to whatever time the
  466.                          computer's clock says it is
  467.        e) notes:    
  468.        f) calls:
  469.     3. TimeStamp      string function
  470.        a) function:      returns a string with the current date and
  471.                          time     
  472.        b) syntax:        s := TimeStamp
  473.        c) returns:       s initialized to a string of the form
  474.                          "mm/dd/yy hh:mm am"
  475.        d) side effects:  none
  476.        e) notes:         useful for including in a write statement.
  477.                          The value returned is based on the computer's
  478.                          clock.
  479.        f) calls:         SysTime, SysDate,TimeStamp
  480.  I. Miscellaneous
  481.     1. MakeBox
  482.        a) function:      draws a box using reverse video on the
  483.                          CRT           
  484.        b) syntax:        DrawBox(x1,y1,x2,y2)
  485.        c) returns:       nothing
  486.        d) side effects:  none
  487.        e) notes:         draws a box from x1,y1 to x2,y2
  488.        f) calls:         aputc
  489.     2. WhereOut
  490.        a) function:      permits user to select between CRT and
  491.                          printer output.
  492.        b) syntax:        WhereOut
  493.        c) returns:       nothing
  494.        d) side effects:  opens "out" as either LST: or CON: depending
  495.                          on user response
  496.        e) notes:         file out should be closed when finished.
  497.        f) calls:         HelpWdo, MainWdo
  498.     3. Page
  499.        a) function:      if printer selected as output sends a form
  500.                          feed as per standard procedure, does a Wait
  501.                          if CRT selected.     
  502.        b) syntax:        Page;
  503.        c) returns:       nothing
  504.        d) side effects:  form feed or wait
  505.        e) notes:         Tests To_LST flag
  506.        f) calls:         wait
  507.