home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a013 / 1.ddi / SOURCE.EXE / F_SCRNS.PRG < prev    next >
Encoding:
Text File  |  1991-01-25  |  2.9 KB  |  117 lines

  1.  
  2.  
  3. STATIC counter := 0, screens := {}
  4.  
  5. *****************************************************************
  6. FUNCTION SCRNPUSH (top, left, bottom, right)
  7. *****************************************************************
  8.  
  9. * Push a screen onto screen stack
  10.  
  11. * Copyright(c) 1991 -- James Occhiogrosso
  12.  
  13. * Initialize parameters not passed
  14. top    = IF(top = NIL, 0, top)
  15. left   = IF(left = NIL, 0, left)
  16. bottom = IF(bottom = NIL, MAXROW(), bottom)
  17. right  = IF(right = NIL, MAXCOL(), right)
  18.  
  19. * Increment screen counter and screen array
  20. counter++
  21. ASIZE(screens, counter)
  22.  
  23. * Push screen onto stack
  24. screens[counter] = SCRNSAVE(top, left, bottom, right)
  25.  
  26. RETURN counter
  27.  
  28.  
  29. *****************************************************************
  30. FUNCTION SCRNPOP
  31. *****************************************************************
  32.  
  33. * Restore a screen from screen stack
  34.  
  35. IF counter > 0
  36.  
  37.     * Restore the screen 
  38.     SCRNREST(screens[counter])
  39.  
  40.     * Decrement screen counter and screens array
  41.     ASIZE(screens, --counter)
  42.  
  43. ENDIF
  44.  
  45. RETURN counter
  46.  
  47. *****************************************************************
  48. FUNCTION SCRNLOAD (filename)
  49. *****************************************************************
  50.  
  51. * Loads a set of screens from a disk file
  52.  
  53. LOCAL = temp_array := {}
  54.  
  55. * If extension is not passed, default to .ARR
  56. filename = IF(AT('.', filename) = 0, filename + '.ARR', filename)
  57.  
  58. IF filename != NIL .AND. FILE(filename)
  59.  
  60.     * If file exists load temporary array
  61.     ARRESTORE(temp_array, filename)
  62.  
  63.     * Resize screens array
  64.     ASIZE(screens, LEN(screens) + LEN(temp_array))
  65.  
  66.     * Add temporary array to screens array
  67.     ACOPY(temp_array, screens, 1, LEN(temp_array), counter + 1)
  68.  
  69.     * Set screen counter and return its value
  70.     counter := LEN(screens)
  71.     RETURN counter
  72.  
  73. ELSE
  74.     * Return -1 as error indicator
  75.     RETURN -1
  76. ENDIF
  77.  
  78. *****************************************************************
  79. FUNCTION SCRNWRIT (filename)
  80. *****************************************************************
  81.  
  82. * Writes current set of screens to a disk file
  83.  
  84. * If extension is not passed, default to .ARR
  85. filename = IF(AT('.', filename) = 0, filename + '.ARR', filename)
  86.  
  87. * Save screens array to disk
  88. IF filename != NIL .AND. ARSAVE(screens, filename)
  89.     * Successful save
  90.     RETURN LEN(screens)
  91. ELSE
  92.     * Unsuccessful save, return -1 as error indicator
  93.     RETURN -1
  94. ENDIF
  95.  
  96.  
  97. *****************************************************************
  98. FUNCTION SCRNCLR (no_clear)
  99. *****************************************************************
  100.  
  101. * Clears screen stack or returns its size in bytes
  102.  
  103. LOCAL size := 0, cntr := 0
  104.  
  105. IF no_clear = NIL
  106.     * Reset the screen count and screen stack array and return
  107.     counter := 0 ; screens := {}
  108.     RETURN 0
  109. ELSE
  110.     * Otherwise, return size of screen stack
  111.     FOR cntr = 1 TO counter
  112.         size = size + LEN(screens[counter])
  113.     NEXT
  114.     RETURN size
  115. ENDIF
  116.  
  117.