home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Tu-Basic / MC3.INC < prev    next >
Text File  |  1987-04-01  |  8KB  |  238 lines

  1. '┌───────────────────────────────────────────────────────────────────────────┐
  2. '│                               MC.BAS                                   │
  3. '│                             VERSION 1.0                                   │
  4. '│                                                                           │
  5. '│                           MODULE: MC3.INC                                 │
  6. '│                                                                           │
  7. '│                   Turbo Basic                     │
  8. '│        (C) Copyright 1987 by Borland International             │
  9. '│                                                                           │
  10. '│ DESCRIPTION: Display Cells and move around the spreadsheet                │
  11. '│                                                                           │
  12. '└───────────────────────────────────────────────────────────────────────────┘
  13.  
  14.  SUB DisplayType(FX%,FY%)
  15.  ' Display the cell's contents and type
  16.  
  17.    LOCAL CellStatus%, FW%, Contents$, Value#, Dec%, CellColor%
  18.    SHARED Border%
  19.  
  20.    CALL GetRec( FX%,FY%,CellStatus%,Contents$,Value#,Dec%,FW%, CellColor% )
  21.    CALL ClearStat
  22.    IF Border%=%True  THEN
  23.     LOCATE %FlashLine ,1
  24.     PRINT "[";CHR$(FX%);MID$(STR$(FY%),2);",";
  25.     IF FNIN%( %Formula ,CellStatus% ) THEN
  26.       PRINT "Formula]  ";
  27.     ELSEIF FNIN%(%Constant ,CellStatus% ) THEN
  28.       PRINT "Numeric]  ";
  29.     ELSEIF FNIN%(%Txt ,CellStatus% ) THEN
  30.       PRINT "Text]     ";
  31.     ELSE
  32.       PRINT "Indefined]";
  33.     END IF
  34.     LOCATE %StatusLine ,1
  35.     COLOR 9,0
  36.     PRINT Contents$;
  37.     CALL NormVideo
  38.   END IF
  39. END SUB
  40.  
  41. SUB GotoCell(FX%,FY%)
  42. ' goto a cell and display it
  43.  
  44.     LOCAL CellStatus%, FW%,Contents$, Value#, Dec%, L%
  45.     SHARED XPOS%(),Border%
  46.  
  47.     CALL GetRec( FX%,FY%,CellStatus%,Contents$,Value#,Dec%,FW%,CellColor% )
  48.     IF Border%=%True  THEN
  49.        LOCATE 1,XPos%(FX%),0 : COLOR 9,11
  50.        PRINT "│    ";CHR$(FX%);"     │";
  51.        LOCATE FY%+1,1 : PRINT USING "##";FY%;
  52.     END IF
  53.     CALL InvVideo
  54.     LOCATE FY%+1,XPos%(FX%),1
  55.     IF FNIN%( %Txt ,CellStatus% ) THEN
  56.       IF LEN(Contents$)>%CellWidth  THEN L%= LEN(Contents$) ELSE L%=%CellWidth
  57.       PRINT LEFT$(Contents$+SPACE$(L%),L%);
  58.     ELSE
  59.       PRINT USING FNMASK$(FW%,DEC%);Value#;
  60.     END IF
  61.     CALL NormVideo
  62.     CALL DisplayType(FX%,FY%)          ' Show the cell type on the screen
  63.     LOCATE FY%+1,XPos%(FX%),1          ' Go to the location
  64.  
  65. END SUB
  66.  
  67. SUB LeaveCell(FX%,FY%)
  68. ' Leave a cell
  69.  
  70.   LOCAL CellStatus%, FW%,Contents$, Value#, Dec%,L%
  71.   SHARED Xpos%(),Border%
  72.  
  73.     CALL GetRec( FX%,FY%,CellStatus%,Contents$,Value#,Dec%,FW%, CellColor% )
  74.     IF Border%=%True  THEN
  75.        LOCATE 1,XPos%(FX%),0 : COLOR 15,9
  76.        PRINT "│    ";CHR$(FX%);"     │";
  77.        LOCATE FY%+1,1 : PRINT USING "##";FY%;
  78.     END IF
  79.     COLOR CellColor% \ 256, CellColor% MOD 256
  80.     LOCATE FY%+1,XPos%(FX%),1
  81.     IF FNIN%( %Txt ,CellStatus% ) THEN
  82.       IF LEN(Contents$)>%CellWidth  THEN L%= LEN(Contents$) ELSE L%=%CellWidth
  83.       PRINT LEFT$(Contents$+SPACE$(L%),L%);
  84.     ELSE
  85.       PRINT USING FNMASK$(FW%,DEC%);Value#;
  86.     END IF
  87.     CALL LowVideo
  88. END SUB
  89.  
  90. SUB UpDate
  91. ' Update restores the screen with all the current values of the cells.
  92.  
  93.   LOCAL FX%, FY%, CellStatus%, FW%, Contents$, Value#, Dec%
  94.   SHARED GlobFX%,GlobFY%
  95.  
  96.     CLS
  97.     CALL Grid
  98.     FOR FX% = %FXMin  TO %FXMax
  99.       FOR FY% = %FYMin  TO %FYMax
  100.         CALL GetRec( FX%,FY%,CellStatus%,Contents$,Value#,Dec%,FW%, CellColor%)
  101.         IF Contents$ <> "" OR FNIn%(CellStatus%,%Constant +%Calculated ) THEN
  102.           CALL LeaveCell( FX%,FY% )
  103.         END IF
  104.       NEXT FY%
  105.     NEXT FX%
  106.     CALL GotoCell( GlobFX%, GlobFY% )
  107.  
  108. END SUB
  109.  
  110. SUB MoveHome
  111. 'Move to cell A1
  112.  
  113.   SHARED GlobFX%,GlobFY%
  114.   LOCAL CellStatus%, FW%, Contents$, Value#, Dec%
  115.  
  116.   CALL LeaveCell( GlobFX%, GlobFY% )
  117.   CALL GetRec(%FxMin,%FyMin,CellStatus%,Contents$,Value#,Dec%,FW%,CellColor%)
  118.   IF (CellStatus% AND ( %OverWritten  + %Locked  )) = 0  THEN
  119.     GlobFx%=%FxMin
  120.     GlobFy%=%FyMin
  121.     CALL GotoCell( GlobFX%, GlobFY% )
  122.   END IF
  123. END SUB
  124.  
  125. SUB MoveEnd
  126. 'Move to cell G21
  127.  
  128.   SHARED GlobFX%,GlobFY%
  129.   LOCAL CellStatus%, FW%, Contents$, Value#, Dec%
  130.  
  131.   CALL GetRec(%FxMax,%FyMax,CellStatus%,Contents$,Value#,Dec%,FW%,CellColor%)
  132.   IF (CellStatus% AND ( %OverWritten  + %Locked  )) = 0  THEN
  133.     CALL LeaveCell( GlobFX%, GlobFY% )
  134.     GlobFx%=%FxMax
  135.     GlobFy%=%FyMax
  136.     CALL GotoCell( GlobFX%, GlobFY% )
  137.   END IF
  138. END SUB
  139.  
  140. SUB MoveDown
  141. ' Move down the spreadsheet
  142.  
  143.   SHARED GlobFX%,GlobFY%
  144.   LOCAL CellStatus%, FW%, Contents$, Value#, Dec%, Start%
  145.  
  146.     CALL LeaveCell( GlobFX%, GlobFY% )
  147.     Start% = GlobFY%
  148.     DO
  149.       GlobFY% = GlobFY% + 1
  150.       IF GlobFY% > %FYMax  THEN GlobFY% = %FYMin
  151.       CALL GetRec( GlobFX%,GlobFY%,CellStatus%,Contents$,Value#,Dec%,FW%,CellColor% )
  152.     LOOP UNTIL ( (CellStatus% AND ( %OverWritten  + %Locked  )) = 0 )_
  153.                OR ( GlobFY% = Start% )
  154.     IF GlobFY% <> Start% THEN CALL GotoCell( GlobFX%, GlobFY% )
  155. END SUB
  156.  
  157. SUB MoveUp
  158. ' Move up the spreadsheet
  159.  
  160.   SHARED GlobFX%,GlobFY%
  161.   LOCAL CellStatus%, FW%,Contents$, Value#, Dec%, Start%
  162.  
  163.     CALL LeaveCell( GlobFX%, GlobFY% )
  164.     Start% = GlobFY%
  165.     DO
  166.       GlobFY% = GlobFY% - 1
  167.       IF GlobFY% < %FYMin  THEN GlobFY% = %FYMax
  168.       CALL GetRec( GlobFX%,GlobFY%,CellStatus%,Contents$,Value#,_
  169.                    Dec%,FW%,CellColor% )
  170.     LOOP UNTIL ( (CellStatus% AND ( %OverWritten +%Locked  )) = 0 ) OR _
  171.                ( GlobFY% = Start% )
  172.     IF GlobFY% <> Start% THEN CALL GotoCell( GlobFX%, GlobFY% )
  173. END SUB
  174.  
  175. SUB MoveRight
  176. ' Move to the right column in the spreadsheet
  177.  
  178.   SHARED GlobFX%,GlobFY%
  179.   LOCAL CellStatus%, FW%, Contents$, Value#, Dec%, Start%
  180.  
  181.     CALL LeaveCell( GlobFX%, GlobFY% )
  182.     Start% = GlobFX%
  183.     DO
  184.       GlobFX% = GlobFX% + 1
  185.       IF GlobFX% > %FXMax  THEN
  186.         GlobFX% = %FXMin
  187.         GlobFY% = GlobFY% + 1
  188.         IF ( GlobFY% > %FYMax  ) THEN GlobFY% = %FYMin
  189.       END IF
  190.       CALL GetRec( GlobFX%,GlobFY%,CellStatus%,Contents$,Value#,Dec%,_
  191.                    FW%,CellColor% )
  192.     LOOP UNTIL ( (CellStatus% AND ( %OverWritten +%Locked  )) = 0 ) OR _
  193.                ( GlobFX%=Start% )
  194.     IF (GlobFX%<>Start%) THEN CALL GotoCell( GlobFX%, GlobFY% )
  195.  
  196.  END SUB
  197.  
  198. SUB MoveLeft
  199. ' Move to the left column in the spreadsheet
  200.  
  201.   SHARED GlobFX%,GlobFY%
  202.   LOCAL CellStatus%, FW%, Contents$, Value#, Dec%, Start%
  203.  
  204.     CALL LeaveCell( GlobFX%, GlobFY% )
  205.     Start% = GlobFX%
  206.     DO
  207.      GlobFX% = GlobFX% - 1
  208.       IF GlobFX% < %FXMin  THEN
  209.         GlobFX% = %FXMax
  210.         GlobFY% = GlobFY% - 1
  211.         IF GlobFY% < %FYMin  THEN GlobFY% = %FYMax
  212.       END IF
  213.       CALL GetRec( GlobFX%,GlobFY%,CellStatus%,Contents$,Value#,Dec%,_
  214.                    FW%,CellColor% )
  215.     LOOP UNTIL ( (CellStatus% AND ( %OverWritten +%Locked  )) = 0 ) OR _
  216.                ( GlobFY% = Start% )
  217.     IF GlobFX% <> Start% THEN CALL GotoCell( GlobFX%,GlobFY% )
  218. END SUB
  219.  
  220. SUB MoveToCell
  221. ' move to a specified cell
  222.  
  223.     SHARED GlobFx%,GlobFy%
  224.     LOCAL S$
  225.  
  226.     CALL Msg("Enter the cell reference where you want to go : ")
  227.     CALL GetLine(POS(0),CSRLIN,3,%True ,0,S$)
  228.     IF S$<>"" AND S$<>CHR$(255) THEN
  229.        IF FNInCharSet%(LEFT$(S$,1),"ABCDEFG") AND VAL(MID$(S$,2))>=%FyMin_
  230.           AND VAL(MID$(S$,2))<=%FyMax  THEN
  231.           CALL LeaveCell(GlobFx%,GlobFy%)
  232.           GlobFx%=ASC(S$)
  233.           GlobFy%=VAL(MID$(S$,2))
  234.        END IF
  235.     END IF
  236.  
  237. END SUB
  238.