home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / clarion / clndr.zip / CALENDAR.CLA < prev    next >
Text File  |  1990-02-10  |  33KB  |  791 lines

  1.          TITLE('APPOINTMENT CALENDAR SCREEN')
  2. CALENDAR     PROGRAM
  3.          INCLUDE('\CLARION\CTL_KEYS')     !COPY IN CTL_KEYS
  4.          INCLUDE('\CLARION\STD_KEYS')     !COPY IN STD_KEYS
  5.          INCLUDE('\CLARION\ERRORS')         !COPY IN CLARION ERROR CODES
  6.  
  7.  OMIT('**-END-**')
  8. ! ┌───────────────────────────────────────────────────────────┐
  9. ! │  Modified 2-1-90 to allow for more appointment times,     │
  10. ! │  for those of us who do not have Banker's Hours.          │
  11. ! │  Report added for those not fortunate enough to receive   │
  12. ! │  company lap tops. Also TAB Key feature added to jump     │
  13. ! │  between time columns quickly. Path changed to \CAL      .   │
  14. ! │                                  │
  15. ! │              Dan Scott <Link Computer Systems>          │
  16. ! └───────────────────────────────────────────────────────────┘
  17. **-END-**
  18.  
  19.          MAP                 !DEFINE MAP STRUCTURE
  20.            PROC(SHOW_CALNDAR)
  21.            PROC(GET_APPOINTS)
  22.            PROC(NOTES_FIELD)
  23.            PROC(GET_FILE)
  24.          .
  25.  
  26. MEMO_ROWS    EQUATE(18)             !SET UP EQUTES FOR MEMO FIELD
  27. MEMO_COLS    EQUATE(70)
  28. MEMO_SIZE    EQUATE(MEMO_ROWS * MEMO_COLS)
  29.  
  30. APPOINTS     FILE,NAME(APPT_PTHNAME),CREATE,RECLAIM,PRE(APP) !DEFINE APPOINTMENT FILE
  31. DATE_KEY       KEY(APP:DATE)             !KEEP A KEY IN DATE ORDER
  32.  
  33. COMMENTS      MEMO(MEMO_SIZE)         !DELCLARE A MEMO FIELD
  34.  
  35. DAILY           RECORD
  36. DATE         LONG
  37.          GROUP,DIM(54)             !SET UP AN ARRAY FOR EACH HALF
  38. APPOINTMENT       STRING(40)             ! HOUR APPOINTMENT
  39.          .
  40. AM         BYTE                 ! NUMBER OF APPOINTMENTS IN AM
  41. PM         BYTE                 ! NUMBER OF APPOINTMENTS IN PM
  42.          . .                 ! END OF RECORD, END OF FILE
  43.  
  44. APPT_PTHNAME GROUP,PRE(ACT)             !ACTIVE APPOINTMENT FILE
  45. APPT_PATH     STRING('\CAL\')             !PATH FOR APPOINTMENT FILE(S)
  46. APPT_NAME STRING(8)                 !FILENAME VARIABLE FOR APPOINTS
  47.          .
  48.  
  49. APPT_CTL     FILE,NAME('\CAL\APPT_CTL'),PRE(CTL),RECLAIM
  50.                          !MAINTAINS LIST OF APPOINTMENT
  51. NAME_KEY      KEY(CTL:NAME)             !   FILES
  52. FILE_REC      RECORD
  53. NAME           STRING(8)             !NAME OF FILE, 1ST 8 CHARACTERS
  54.          ..                     ! END OF RECORD, END OF FILE
  55.          EJECT
  56. MAIN         SCREEN      PRE(MNU),HLP('MAIN'),HUE(8,0,0)
  57.  OMIT('**-END-**')
  58. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  59. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  60. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╔════════════════════════════════════════╗▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  61. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  62. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║         THE APPOINTMENT PARTNER        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  63. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  64. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╟────────────────────────────────────────╢░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  65. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  66. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  67. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  68. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║         ADD/CHANGE APPOINTMENTS        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  69. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  70. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  71. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║       CHOOSE A PERSONAL SCHEDULE        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  72. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  73. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  74. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║              EXIT            ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  75. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  76. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║                        ║░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  77. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╚════════════════════════════════════════╝░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  78. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  79. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  80. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  81. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  82.                 ■■■■■■■■■■■■■■■■■■■■■■■■■
  83. **-END-**
  84.  
  85.            ROW(4,21)  PAINT(3,40),HUE(15,1)
  86.            ROW(8,21)  PAINT(12,40),HUE(1,2)
  87.            ROW(25,1)  PAINT(1,80),HUE(14,6)
  88.            ROW(1,1)      REPEAT(2);STRING('▒{80}'),HUE(8,0) .
  89.            ROW(3,1)      STRING('▒{19}<0{42}>▒{19}'),HUE(8,0)
  90.            ROW(4,1)      REPEAT(17);STRING('▒{19}<0{42}>░▒{18}'),HUE(8,0) .
  91.            ROW(21,1)  STRING('▒{20}░{42}▒{18}'),HUE(8,0)
  92.            ROW(22,1)  REPEAT(3);STRING('▒{80}'),HUE(8,0) .
  93.            ROW(3,20)  STRING('╔═{40}╗'),HUE(15,4)
  94.            ROW(4,20)  REPEAT(3);STRING('║<0{40}>║'),HUE(15,4) .
  95.            ROW(7,20)  STRING('╟─{40}╢'),HUE(15,4)
  96.            ROW(8,20)  REPEAT(12);STRING('║<0{40}>║'),HUE(15,4) .
  97.            ROW(20,20) STRING('╚═{40}╝'),HUE(15,4)
  98.            ROW(5,30)  STRING('THE APPOINTMENT PARTNER')
  99.            ROW(25,29) MENU(@S25),USE(?CHOICE),HLP('MAIN'),SEL(14,6),REQ
  100. CHOICE2           ROW(11,30)   STRING('ADD/CHANGE APPOINTMENTS'),HUE(1,2)            |
  101.                   DESC('    SHOW APPOINTMENTS    ')
  102. CHOICE1           ROW(14,28)   STRING('CHOOSE A PERSONAL SCHEDULE'),HUE(1,2)        |
  103.                   DESC('RETRIEVE OR CREATE A FILE')
  104. CHOICE3           ROW(17,39)   STRING('EXIT'),HUE(1,2),DESC('   END CALENDAR PROGRAM  ')
  105.          .          .
  106.  
  107.   CODE
  108.   HELP('CALENDAR')                 !OPEN THE HELP FILE
  109.   OPEN(MAIN)                     !OPEN MAIN MENU SCREEN
  110.   LOOP
  111.    ALERT                     !CLEAR ALERT KEYS
  112.    ACCEPT                     !GET CHOICE
  113.    EXECUTE CHOICE()
  114.       SHOW_CALNDAR                 !SHOW THE CALENDAR SCREEN
  115.       GET_FILE                     !GET OR CREATE A FILE
  116.       RETURN                     !TERMINATE THE PROGRAM
  117.   ..
  118.  
  119.          EJECT('SHOW CALENDAR')
  120. SHOW_CALNDAR PROCEDURE
  121.  
  122. CALENDAR     SCREEN      WINDOW(25,80),AT(1,1),PRE(CAL),HUE(14,0,0)
  123.  OMIT('**-END-**')
  124.   ║  SUNDAY  │    MONDAY    │ TUESDAY  │ WEDNESDAY│ THURSDAY │  FRIDAY  │ SATURDAY ║
  125.   ║    <#    │        │       │          │         │        │           ║
  126.   ║■■■■■■■■■■│        │       │          │         │        │           ║
  127.   ║■■■■■■■■■■│        │       │          │         │        │           ║
  128.   ╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
  129. ■ ║         │        │       │          │         │        │           ║
  130.   ║         │        │       │          │         │        │           ║
  131.   ║         │        │       │          │         │        │           ║
  132.   ╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
  133.   ║         │        │       │          │         │        │           ║
  134.   ║         │        │       │          │         │        │           ║
  135.   ║         │        │       │          │         │        │           ║
  136.   ╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
  137.   ║         │        │       │          │         │        │           ║
  138.   ║         │        │       │          │         │        │           ║
  139.   ║         │        │       │          │         │        │           ║
  140.   ╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
  141.   ║         │        │       │          │         │        │           ║
  142.   ║         │        │       │          │         │        │           ║
  143.   ║         │        │       │          │         │        │           ║
  144.   ╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
  145.   ║         │        │       │          │         │        │           ║
  146.   ║         │        │       │          │         │        │           ║
  147.   ║         │        │       │          │         │        │           ║
  148.   ╚══════════╧══════════╧══════════╧╣■■■■■■■■╠╧══════════╧══════════╧══════════╝
  149. **-END-**
  150.  
  151.            ROW(2,4)      PAINT(23,76),HUE(0,7)
  152.            ROW(1,3)      REPEAT(4)
  153.                 STRING('<186,0{10},179,0{10},179,0{10},179,0{10}>'    |
  154.                 & '<179,0{10},179,0{10},179,0{10},186>'),HUE(7,1) .
  155.            ROW(5,3)      REPEAT(5),EVERY(4)
  156.                 STRING('<199,196{10},197,196{10},197,196{10},197>'    |
  157.                 & '<196{10},197,196{10},197,196{10},197,196{10}>'    |
  158.                 & '<182>'),HUE(7,1) .
  159.            ROW(6,3)      REPEAT(10),EVERY(2)
  160.                 STRING('<186,0{10},179,0{10},179,0{10},179,0{10}>'    |
  161.                 & '<179,0{10},179,0{10},179,0{10},186>'),HUE(7,1) .
  162.            ROW(7,3)      REPEAT(5),EVERY(4)
  163.                 STRING('<186,0{10},179,0{10},179,0{10},179,0{10}>'    |
  164.                 & '<179,0{10},179,0{10},179,0{10},186>'),HUE(7,1) .
  165.            ROW(25,3)  STRING('<200,205{10},207,205{10},207,205{10},207>'    |
  166.                 & '<0{10},207,205{10},207,205{10},207,205{10},188>')|
  167.                 HUE(7,1)
  168.          COL(37)  STRING('<185,0{8},204>'),HUE(7,1)
  169.            ROW(1,4)      STRING('  SUNDAY  '),HUE(15,1)
  170.          COL(15)  STRING('  MONDAY  '),HUE(15,1)
  171.          COL(26)  STRING(' TUESDAY  '),HUE(15,1)
  172.          COL(37)  STRING(' WEDNESDAY'),HUE(15,1)
  173.          COL(48)  STRING(' THURSDAY '),HUE(15,1)
  174.          COL(59)  STRING('  FRIDAY  '),HUE(15,1)
  175.          COL(70)  STRING(' SATURDAY '),HUE(15,1)
  176.               REPEAT(14),INDEX(INDEX)
  177. MONTH_YEAR     ROW(6,1)        STRING(1),ENH
  178.               .
  179.               REPEAT(6,7),EVERY(4,11),INDEX(INDEX)
  180.            ROW(2,4)        POINT(3,10),USE(?INDEX),HLP('CALENDAR'),REQ
  181. DAY         COL(8)        STRING(@N_2B)
  182. AM           ROW(3,4)        STRING(10)
  183. PM           ROW(4,4)        STRING(10)
  184.               .
  185. APPT_NAME      ROW(25,38) STRING(8)
  186.          .
  187.  
  188. DATE         LONG                 !SELECTED DATE
  189. MONTH         LONG                 !SELECTED MONTH
  190. DAY         LONG                 !SELECTED DAY
  191. YEAR         LONG                 !SELECTED YEAR
  192. MONTH_YEAR   STRING(14)                 !SELECTED MONTH AND YEAR
  193.  
  194. MONTH_NAMES  GROUP                 !NAMES OF THE MONTHS
  195.            STRING('JANUARY  FEBRUARY MARCH    APRIL    ')
  196.            STRING('MAY      JUNE     JULY     AUGUST   ')
  197.            STRING('SEPTEMBEROCTOBER  NOVEMBER DECEMBER ')
  198.          .
  199. MONTH_NAME   STRING(9),DIM(12),OVER(MONTH_NAMES) !ARRAY OF MONTH NAMES
  200.  
  201. TRNSFORM_TBL GROUP                 !THIS TABLE TRANSFORMS
  202.            STRING('<01,07,13,19,25,31,37>')     !  COLUMN WITHIN ROW
  203.            STRING('<02,08,14,20,26,32,38>')     !    SEQUENCE
  204.            STRING('<03,09,15,21,27,33,39>')     !    INTO
  205.            STRING('<04,10,16,22,28,34,40>')     !  ROW WITHIN COLUMN
  206.            STRING('<05,11,17,23,29,35,41>')     !    SEQUENCE
  207.            STRING('<06,12,18,24,30,36,42>')     !
  208.          .                     !
  209. TRANSFORM    BYTE,DIM(42)OVER(TRNSFORM_TBL)     !REDECLARE AS A BYTE ARRAY
  210.  
  211. INDEX         BYTE                 !REPEAT INDEX
  212. SAVE_INDEX   BYTE                 !SAVE AREA FOR REPEAT INDEX
  213. BASE_COL     LONG                 !LAST COLUMN OF LAST MONTH
  214. BASE_DATE    LONG                 !LAST DAY OF LAST MONTH
  215. I         BYTE                 !SUBSCRIPT USED FOR DAY
  216. LAST_DAY     BYTE                 !LAST CALENDAR DAY OF MONTH
  217.  
  218.   CODE
  219.   IF ~ACT:APPT_NAME THEN GET_FILE.         !IF FILE NOT SELECTED,GET ONE
  220.   SHARE(APPOINTS)
  221.   CLEAR(APP:DAILY)
  222.   SET(APP:DATE_KEY,APP:DATE_KEY)
  223.   LOOP UNTIL EOF(APPOINTS)
  224.      NEXT(APPOINTS)
  225.      IF APP:DATE < TODAY() - 31
  226.     DELETE(APPOINTS)
  227.      .
  228.   .
  229.   DATE = TODAY()                 !SELECT TODAY'S DATE
  230.   MONTH = MONTH(DATE)                 !SELECT TODAY'S MONTH
  231.   DAY = DAY(DATE)                 !SELECT TODAY'S DAY
  232.   YEAR = YEAR(DATE)                 !SELECT TODAY'S YEAR
  233.   INDEX = TRANSFORM[(DATE-DAY+1) % 7 + DAY]     !SET REPEAT INDEX
  234.   OPEN(CALENDAR)                 !SHOW THE CALENDAR
  235.   CAL:APPT_NAME     =  CENTER(ACT:APPT_NAME)     !DISPLAY ACTIVE FILE
  236.   LOOP                         !LOOP UNTIL CTRL-ESC KEY
  237.     SAVE_INDEX = INDEX                 !SAVE REPEAT INDEX
  238.     MONTH_YEAR = CLIP(MONTH_NAME[MONTH])&' '&YEAR!SET MONTH AND YEAR
  239.     LOOP INDEX = 1 TO 14             !SHOW THE MONTH AND YEAR
  240.       CAL:MONTH_YEAR = SUB(MONTH_YEAR,INDEX,1)     !
  241.     .
  242.     BASE_DATE = DATE(MONTH,1,YEAR) - 1         !SET BASE DATE
  243.     BASE_COL = (BASE_DATE + 1) % 7         !SET BASE COLUMN
  244.     LAST_DAY = DAY(DATE(MONTH+1,1,YEAR) -1)     !GET LAST DAY OF MONTH
  245.     LOOP I = 1 TO BASE_COL             !CLEAR LEADING UNUSED BOXES
  246.       INDEX = TRANSFORM[I]             !  FOR THE MONTH DISPLAYED
  247.       CAL:DAY = ''                 ! CLEAR SCREEN VARIABLE
  248.       CAL:AM = ''                 !       "
  249.       CAL:PM = ''                 !       "
  250.     .
  251.     LOOP I = (LAST_DAY + BASE_COL + 1) TO (42)     !CLEAR TRAILING UNUSED BOXES
  252.       INDEX = TRANSFORM[I]             !  FOR THE MONTH DISPLAYED
  253.       CAL:DAY = ''                 ! CLEAR SCREEN VARIABLE
  254.       CAL:AM = ''                 !       "
  255.       CAL:PM = ''                 !       "
  256.     .
  257.     LOOP I = 1 TO LAST_DAY             !LOOP FOR EACH DAY OF MONTH
  258.       INDEX = TRANSFORM[I + BASE_COL]         !SET REPEAT INDEX TO TODAY
  259.       CAL:DAY = I                 !SHOW THE DAY OF THE MONTH
  260.       APP:DATE = BASE_DATE + I             !SET THE DATE FOR THIS DAY
  261.       CAL:AM = ''                 !CLEAR SCREEN VARIABLE
  262.       CAL:PM = ''                 !
  263.       GET(APPOINTS,APP:DATE_KEY)         !READ THE APPOINTMENT RECORD
  264.       IF ~ERROR()                 !IF THERE IS A RECORD
  265.     IF APP:AM                 !SHOW COUNT OF AM APPOINTMENTS
  266.        CAL:AM = APP:AM & ' APPT AM'
  267.        CAL:AM = CENTER(CAL:AM)
  268.     .
  269.     IF APP:PM                 !SHOW COUNT OF PM APPOINTMENTS
  270.        CAL:PM = APP:PM & ' APPT PM'
  271.        CAL:PM = CENTER(CAL:PM)
  272.     . . .
  273.     INDEX = SAVE_INDEX                 !RESTORE REPEAT INDEX
  274.     LOOP
  275.       ALERT                     !CLEAR ALL ALERT KEYS
  276.       ALERT(CTRL_HOME)                 !CTRL-HOME RESETS CALENDAR
  277.       ALERT(CTRL_ESC)                 !CTRL-ESC TERMINATES CALENDAR
  278.       LOOP WHILE KEYBOARD();ASK.
  279.       ACCEPT                     !GET AN ALERTED KEY STROKE
  280.       CASE KEYCODE()                 !JUMP TO THE KEYSTROKE
  281.       OF ENTER_KEY                 !DAY WAS SELECTED
  282.     GET_APPOINTS(DATE(MONTH,CAL:DAY,YEAR))     !  GET APPOINTMENTS
  283.     CAL:AM = ''
  284.     CAL:PM = ''
  285.     IF APP:AM                 !SHOW COUNT OF AM APPOINTMENTS
  286.        CAL:AM = APP:AM & ' APPT AM'
  287.        CAL:AM = CENTER(CAL:AM)
  288.     .
  289.     IF APP:PM                 !SHOW COUNT OF PM APPOINTMENTS
  290.        CAL:PM = APP:PM & ' APPT PM'
  291.        CAL:PM = CENTER(CAL:PM)
  292.     .
  293.     CYCLE                     !  DO NOT REDISPLAY CALENDAR
  294.       OF CTRL_ESC                 !RETURN ON Ctrl-Esc KEY
  295.     RETURN
  296.       OF PGUP_KEY                 !LAST MONTH ON PgUp kEY
  297.     MONTH-=1
  298.       OF PGDN_KEY                 !NEXT MONTH ON PgDn KEY
  299.     MONTH+=1
  300.       OF CTRL_PGUP                 !LAST YEAR ON Ctrl-PgUp KEY
  301.     YEAR-=1
  302.       OF CTRL_PGDN                 !NEXT YEAR ON Ctrl-PgDn KEY
  303.     YEAR+=1
  304.       OF CTRL_HOME                 !TODAY ON Ctrl-Home KEY
  305.     DATE = TODAY()                 !SELECT TODAY'S DATE
  306.     MONTH = MONTH(DATE)             !SELECT TODAY'S MONTH
  307.     DAY = DAY(DATE)                 !SELECT TODAY'S DAY
  308.     YEAR = YEAR(DATE)             !SELECT TODAY'S YEAR
  309.     INDEX = TRANSFORM[(DATE-DAY+1) % 7 + DAY]!SET REPEAT INDEX TO TODAY
  310.       .
  311.       IF MONTH < 1 THEN YEAR-=1;MONTH=12.     !CORRECT MONTH UNDERFLOW
  312.       IF MONTH > 12 THEN YEAR+=1;MONTH=1.     !CORRECT MONTH OVERFLOW
  313.       BREAK                     !REDISPLAY THE CALANDER
  314.   . .
  315.          EJECT('GET APPOINTMENTS WINDOW')
  316. GET_APPOINTS PROCEDURE(DATE)
  317.  
  318. APPOINT_WIN  SCREEN      WINDOW(25,80),AT(1,1),PRE(WIN),HLP('APPOINT'),HUE(14,4)
  319.  OMIT('**-END-**')
  320. ╔═══════════ APPOINTMENTS FOR ════════╤═══ ■■■■■■■■■■■■■■■■■■■■■■■■■■ ═════════╗
  321. ║ F1 Help      mmm dd,yyyy          │       ■■■■■■■■■■■■■■■■■■■■■■■■■■           ║
  322. ║        ■■■■■■■■■          │       ■■■■■■■■■■■■■■■■■■■■■■■■■■           ║
  323. ╟─────────────────────────────────────┴────────────────────────────────────────╢
  324. ║  ■■■■■ ■■■■■■■■■■■■■■■■■                               ║
  325. ║                                           ║
  326. ║                                           ║
  327. ║                                           ║
  328. ║                                           ║
  329. ║                                           ║
  330. ║                                           ║
  331. ║                                           ║
  332. ║                                           ║
  333. ║                                           ║
  334. ║                                           ║
  335. ║                                           ║
  336. ║                                           ║
  337. ║                                           ║
  338. ║                                           ║
  339. ║                                           ║
  340. ║                                           ║
  341. ║                                           ║
  342. ╟───────────────────────────────────── ────────────────────────────────────────╢
  343. ║     CTRL_ENTER to Save Appointments - CTRL_N to Edit Notes Window           ║
  344. ╚══════════════════════════════════════════════════════════════════════════════╝
  345. **-END-**
  346.  
  347.            ROW(2,44)  PAINT(2,1),HUE(1,2)
  348.            ROW(24,8)  PAINT(1,63),HUE(14,1)
  349.            ROW(5,4)      PAINT(18,23),HUE(15,6)
  350.            ROW(5,28)  PAINT(18,24),HUE(15,6)
  351.            ROW(5,53)  PAINT(18,24),HUE(15,6)
  352.            ROW(1,1)      STRING('╔<0{3}>═{8}<0{18}>═{5}<0,0>═╤═══<0{37}>╗')
  353.            ROW(2,1)      REPEAT(2);STRING('║<0{37}>│<0{40}>║') .
  354.            ROW(4,1)      STRING('╟─{37}┴─{40}╢')
  355.            ROW(5,1)      REPEAT(18);STRING('║<0{78}>║') .
  356.            ROW(23,1)  STRING('╟─{37}<0>─{40}╢')
  357.            ROW(24,1)  STRING('║<0{78}>║')
  358.            ROW(25,1)  STRING('╚═{78}╝')
  359.            ROW(1,2)      STRING('═══<0{31}>══<0{33}>═{9}'),ENH
  360.          COL(13)  STRING(' APPOINTMENTS FOR'),HUE(14,4)
  361.          COL(43)  STRING(' '),HUE(14,4)
  362.          COL(70)  STRING(' '),HUE(14,4)
  363.            ROW(2,3)      STRING('F1 Help'),HUE(14,4)
  364.          COL(40)  STRING(' '),HUE(14,4)
  365.            ROW(3,40)  STRING(' '),HUE(14,4)
  366.            ROW(5,2)      STRING('  '),HUE(14,4)
  367.          COL(40)  STRING('   '),HUE(15,6)
  368.            ROW(6,39)  STRING('   '),HUE(15,6)
  369.            ROW(7,39)  STRING(' '),HUE(15,6)
  370.            ROW(8,39)  STRING('  '),HUE(15,6)
  371.            ROW(9,39)  STRING('  '),HUE(15,6)
  372.            ROW(10,39) STRING('   '),HUE(15,6)
  373.            ROW(11,39) STRING('  '),HUE(15,6)
  374.            ROW(12,39) STRING('  '),HUE(15,6)
  375.            ROW(13,39) STRING('  '),HUE(15,6)
  376.            ROW(14,39) STRING('  '),HUE(15,6)
  377.            ROW(15,39) STRING('  '),HUE(15,6)
  378.            ROW(16,38) STRING('   '),HUE(15,6)
  379.            ROW(17,38) STRING('   '),HUE(15,6)
  380.            ROW(18,39) STRING('   '),HUE(15,6)
  381.            ROW(19,39) STRING('   '),HUE(15,6)
  382.            ROW(20,39) STRING('   '),HUE(15,6)
  383.            ROW(21,39) STRING('  '),HUE(15,6)
  384.            ROW(22,38) STRING('   '),HUE(15,6)
  385.            ROW(23,39) STRING(' '),HUE(14,4)
  386.            ROW(24,8)  STRING(' '),HUE(14,4)
  387.          COL(10)  STRING('CTRL_ENTER'),HUE(15,1)
  388.          COL(21)  STRING('to Save Appointments'),ENH
  389.          COL(42)  STRING('-'),HUE(15,1)
  390.          COL(44)  STRING('CTRL_N'),HUE(15,1)
  391.          COL(51)  STRING('to Edit Notes Windo'),ENH
  392.          COL(70)  STRING('w'),HUE(14,1)
  393.          COL(71)  STRING(' '),HUE(14,1)
  394. DATE           ROW(2,16)  STRING(@D3)
  395. DAY_NAME       ROW(3,17)  STRING(9)
  396. NT1           ROW(1,44)  STRING(26)
  397. NT2           ROW(2,44)  STRING(26)
  398. NT3           ROW(3,44)  STRING(26)
  399.               REPEAT(18,3),EVERY(1,25),INDEX(INDEX)
  400. TIME           ROW(5,4)        STRING(5)
  401.          COL(10)    ENTRY(@S17),USE(APP:APPOINTMENT),HUE(9,6),LFT
  402.          .          .
  403. DATE         LONG                 !APPOINTMENT DATE
  404. TIME         LONG                 !APPOINTMENT TIME
  405. ACTION         BYTE                 !OLD RECORD = 1
  406.                          !NEW RECORD = 2
  407. INDEX         BYTE                 !REPEAT INDEX
  408. DAY_NAMES    GROUP                 !NAMES OF DAYS
  409.            STRING(' SUNDAY   MONDAY  TUESDAY  ')
  410.            STRING('WEDNESDAYTHURSDAY  FRIDAY  ')
  411.            STRING('SATURDAY ')
  412.          .
  413. DAY_NAME     STRING(9),DIM(7),OVER(DAY_NAMES)     !ARRAY OF MONTH NAMES
  414.  
  415.  
  416. REPORT         REPORT      WIDTH(80),PRE(RPT)
  417.               HEADER
  418.          COL(1)        STRING('Date')
  419. DATE         COL(6)        STRING(@D1)
  420.          COL(33)    STRING('Appointment List')
  421.            ROW(+3,1)    STRING('Time {5}Appointment') CTL(@LF2)
  422.               .
  423. DETAIL              DETAIL,PRE(RPT)
  424. TIME         COL(1)        STRING(@T1)
  425. APPT         COL(10)    STRING(40) CTL(@LF)
  426.               .
  427.               DETAIL
  428.                 CTL(@LF)
  429.          .          .
  430.   CODE
  431.   OPEN(APPOINT_WIN)                 !SHOW THE APPOINMENTS WINDOW
  432.   WIN:DATE = DATE                 !SHOW THE APPOINTMENT DATE
  433.   WIN:DAY_NAME = DAY_NAME[DATE%7+1]         !SHOW THE APPOINTMENT DAY
  434.   TIME = 2880001                 !START AT 8:00AM
  435.   LOOP INDEX = 1 TO 54                 !SHOW THE APPOINTMENT TIMES
  436.     WIN:TIME = FORMAT(TIME,@T3)             !  SHOW THE NEXT TIME
  437.     TIME += 90000                 !  ADD 30 MINUTES
  438.   .
  439.   CLEAR(APP:DAILY)                 !CLEAR THE APPOINTMENT RECORD
  440.   CLEAR(APP:COMMENTS)                 !CLEAR THE MEMO FIELD
  441.   APP:DATE = DATE                 !SET THE RECORD KEY
  442.   GET(APPOINTS,APP:DATE_KEY)             !READ THE RECORD
  443.   IF ERROR()
  444.      ACTION = 2                     !RECORD IS NOT FOUND
  445.   ELSE
  446.      ACTION = 1                     !RECORD IS FOUND
  447.   .
  448.   DO TELL_NOTES                     !ANY NOTES ?
  449.   LOOP INDEX = 1 TO 54                 !SHOW APPOINTMENTS
  450.     DISPLAY(?APP:APPOINTMENT)
  451.   .
  452.   INDEX = 1                     !POINT TO FIRST APPOINTMENT
  453.   LOOP                         !LOOP THROUGH ALL THE FIELDS
  454.     ALERT                     !CLEAR ALL ALERT KEYS
  455.     ALERT(CTRL_ESC)                 !CTRL-ESC QUITS WITHOUT CHANGES
  456.     ALERT(CTRL_ENTER)                 !CTRL-ENTER SAVES APPOINTMENTS
  457.     ALERT(CTRL_N)                 !CTRL_W BRINGS UP TEXT WINDOW
  458.     ALERT(F6_KEY)
  459.     ALERT(TAB_KEY)
  460.     LOOP WHILE KEYBOARD();ASK.
  461.     ACCEPT                     !GET A KEY
  462.     CASE KEYCODE()
  463.     OF F6_KEY                     ! ADDED 2-1-90
  464.        DO PRT_DAY                 ! PRINT DAYS APPTS
  465.     OF TAB_KEY                     ! JUMP 8 SLOTS AT A TIME
  466.        INDEX += 8                 ! TO ACCOMODATE 3 COLUMNS
  467.     OF CTRL_ESC                     ! RETURN WITHOUT CHANGES
  468.        RETURN
  469.     OF CTRL_N                     ! OPEN TEXT WINDOW
  470.        NOTES_FIELD                 ! CALL PROCEDURE
  471.        DO TELL_NOTES                 ! ANY NOTES ?
  472.     OF CTRL_ENTER                 ! Save ON Ctrl-Enter
  473.        APP:AM = 0                 !  INITIATE TALLIES FOR DAILY
  474.        APP:PM = 0                 !    APPOINTMENTS
  475.        LOOP INDEX = 1 TO 54             !  MOVE OUT NOTES
  476.         UPDATE(?APP:APPOINTMENT)         !
  477.         IF APP:APPOINTMENT[INDEX]         ! IF AN APPOINTMENT WAS MADE
  478.            IF INDEX < 17             !  AND IN THE AM THEN
  479.           APP:AM += 1             !    INCREMENT AM TALLY
  480.            ELSE                 !  ELSE
  481.           APP:PM += 1             !    INCREMENT PM TALLY
  482.        .    .  .
  483.        EXECUTE ACTION                 ! UPDATE THE FILE
  484.      PUT(APPOINTS)                 !  PUT OLD RECORD
  485.      ADD(APPOINTS)                 !  ADD NEW RECORD
  486.        .
  487.        IF ERROR() THEN STOP(ERROR()).         !CHECK FOR FILE ERROR
  488.        RETURN                     !CLOSE WINDOW & RETURN W/CHNGS
  489.   . .
  490.  
  491. TELL_NOTES    ROUTINE
  492.   IF APP:COMMENTS
  493.      WIN:NT1 = '     There Are NOTES      '     !SHOW MESSAGE TO  INDICATE
  494.      WIN:NT2 = '      for This Date       '     ! THAT     THE COMMENTS FIELD
  495.      WIN:NT3 = '   Press Ctrl_N to View   '     ! IS NOT BLANK
  496.   ELSE
  497.      WIN:NT1 = '                          '     !SHOW MESSAGE TO INDICATE
  498.      WIN:NT2 = '                          '     ! THAT THE COMMENTS FIELD
  499.      WIN:NT3 = '         No NOTES         '     ! IS BLANK
  500.   .
  501. PRT_DAY      ROUTINE
  502.   RPT:DATE = DATE
  503.   OPEN(REPORT)
  504.   TIME = 2880001                 !START AT 8:00AM
  505.   APP:DATE = DATE                 !SET THE RECORD KEY
  506.   LOOP INDEX = 1 TO 54                 !SHOW THE APPOINTMENT TIMES
  507.     RPT:TIME = FORMAT(TIME,@T3)             !  SHOW THE NEXT TIME
  508.     TIME += 90000                 !  ADD 15 MINUTES
  509.     GET(APPOINTS,APP:DATE_KEY)             !READ THE RECORD
  510.     RPT:APPT = APP:APPOINTMENT[INDEX]
  511.     PRINT(RPT:DETAIL)
  512.   .
  513.   CLOSE(REPORT)                     !SHOW APPOINTMENTS
  514.   EXIT
  515.  
  516.  
  517.          EJECT('GET NOTES WINDOW')
  518. NOTES_FIELD    PROCEDURE
  519.  
  520. NOTES_WINDOW SCREEN      WINDOW(22,72),AT(3,4),HUE(14,4)
  521.  OMIT('**-END-**')
  522.    ╔═NOTES════════════════════════════════════════════════════════════════╗
  523.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  524.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  525.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  526.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  527.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  528.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  529.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  530.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  531.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  532.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  533.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  534.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  535.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  536.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  537.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  538.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  539.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  540.    ║■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■║
  541.    ╚════╦════════════════════════╦══════════╦════════════════════════╦════╝
  542.     ║Press Ctrl-Enter to Save║        ║Press  Ctrl-Esc to     Quit║
  543.     ╚════════════════════════╝        ╚════════════════════════╝
  544. **-END-**
  545.  
  546.            ROW(21,7)  PAINT(1,24),HUE(1,3)
  547.            ROW(21,43) PAINT(1,24),HUE(1,3)
  548.            ROW(1,1)      STRING('<201,205,0{5},205{64},187>')
  549.            ROW(2,1)      REPEAT(18);STRING('<186,0{70},186>') .
  550.            ROW(20,1)  STRING('<200,205{4},203,205{24},203,205{10},203>'    |
  551.                 & '<205{24},203,205{4},188>')
  552.            ROW(21,6)  STRING('<186,0{24},186,0{10},186,0{24},186>')
  553.            ROW(22,6)  STRING('<200,205{24},188,0{10},200,205{24},188>')
  554.            ROW(1,3)      STRING('NOTES')
  555.            ROW(21,7)  STRING('Press Ctrl-Enter to Save')
  556.          COL(43)  STRING('Press  Ctrl-Esc to  Quit')
  557.            ROW(2,2)      TEXT(18,70),USE(COMMENTS),HUE(14,6),SEL(14,6),OVR,LFT
  558.          .
  559.  
  560.     CODE
  561.      HELP(,'NOTES')                 !SELECT THE NOTES HELP WINDOW
  562.      OPEN(NOTES_WINDOW)             !SHOW THE WINDOW
  563.      ALERT                     !CLEAR ALL ALERT KEYS
  564.      ALERT(CTRL_ESC)             !CTRL-ESC ABORTS NOTES WINDOW
  565.      ALERT(CTRL_ENTER)             !CTRL-ENTER SAVE NOTES
  566.      LOOP
  567.       ACCEPT                 !WAIT FOR ALERTED KEY
  568.       CASE KEYCODE()
  569.       OF CTRL_ESC                 !RETURN TO APPOINTMENT WINDOW
  570.          RETURN                 ! WITHOUT SAVING NOTES
  571.       OF CTRL_ENTER
  572.          UPDATE                 !SAVE NOTES
  573.          RETURN                 !RETURN TO APPOINTMENT WINDOW
  574.      ..
  575.  
  576.          EJECT('GET AN APPOINTMENT FILE')
  577. GET_FILE     PROCEDURE
  578.  
  579. CTL_LIST     SCREEN      WINDOW(25,68),PRE(LST),HLP('LIST'),HUE(7,1)
  580.  OMIT('**-END-**')
  581.       ╔═════════════════════════════════╤════════════════════════════════╗
  582.       ║          ┌────────┐        │                 ║
  583.       ║          │■■■■■■■■│        │         Type         ║
  584.       ║          │           │  Point        │         In A New     ║
  585.       ║          │           │  To A        │         Name Here     ║
  586.       ║          │           │  Name Here    │        ┌────────┐     ║
  587.       ║          │           │        │        │■■■■■■■■│     ║
  588.       ║          │           │        │        └────────┘     ║
  589.       ║          │           │        │                 ║
  590.       ║          │           │        │                 ║
  591.       ║          │           │      ┌─────┴─────┐                 ║
  592.       ║          │           │      │Active File│                 ║
  593.       ║          └────────┘      │ ■■■■■■■■  │                 ║
  594.       ╟───────────────────────────┴───────────┴──────────────────────────╢
  595.       ║         Use the Up,  Down Arrow Keys to Select a File from the     ║
  596.       ║         List on the Left, or Press     Esc to Enter a Filename in     ║
  597.       ║         the space on the Right.                     ║
  598.       ╟──────────────────────────────────────────────────────────────────╢
  599.       ║        Press Enter to Activate Desired File(File will be CREATED     ║
  600.       ║        if Necessary).  Press Ctrl_D to  Delete the File From the     ║
  601.       ║        List and the DOS Directory.                     ║
  602.       ╟──────────────────────────────────────────────────────────────────╢
  603.       ║             Press Ctrl_Enter or Ctrl_Esc to Return.         ║
  604.       ║            (A File Must Be Active Before Returning.)         ║
  605.       ╚══════════════════════════════════════════════════════════════════╝
  606. **-END-**
  607.  
  608.            ROW(1,1)      STRING('<201,205{33},209,205{32},187>')
  609.            ROW(2,1)      STRING('<186,0{7},218,196{8},191,0{16},179,0{32}>'   |
  610.                 & '<186>')
  611.            ROW(3,1)      REPEAT(3)
  612.                 STRING('<186,0{7},179,0{8},179,0{16},179,0{32}>'   |
  613.                 & '<186>') .
  614.            ROW(6,1)      STRING('<186,0{7},179,0{8},179,0{16},179,0{15},218>' |
  615.                 & '<196{8},191,0{7},186>')
  616.            ROW(7,1)      STRING('<186,0{7},179,0{8},179,0{16},179,0{15},179>' |
  617.                 & '<0{8},179,0{7},186>')
  618.            ROW(8,1)      STRING('<186,0{7},179,0{8},179,0{16},179,0{15},192>' |
  619.                 & '<196{8},217,0{7},186>')
  620.            ROW(9,1)      REPEAT(2)
  621.                 STRING('<186,0{7},179,0{8},179,0{16},179,0{32}>'   |
  622.                 & '<186>') .
  623.            ROW(11,1)  STRING('<186,0{7},179,0{8},179,0{10},218,196{5},193>'|
  624.                 & '<196{5},191,0{26},186>')
  625.            ROW(12,1)  STRING('<186,0{7},179,0{8},179,0{10},179,0{11},179>' |
  626.                 & '<0{26},186>')
  627.            ROW(13,1)  STRING('<186,0{7},192,196{8},217,0{10},179,0{11}>'   |
  628.                 & '<179,0{26},186>')
  629.            ROW(14,1)  STRING('<199,196{27},193,196{11},193,196{26},182>')
  630.            ROW(15,1)  REPEAT(5),EVERY(2);STRING('<186,0{66},186>') .
  631.            ROW(16,1)  REPEAT(3),EVERY(4);STRING('<186,0{66},186>') .
  632.            ROW(18,1)  REPEAT(2),EVERY(4);STRING('<199,196{66},182>') .
  633.            ROW(25,1)  STRING('<200,205{66},188>')
  634.            ROW(3,52)  STRING('Type')
  635.            ROW(4,21)  STRING('Point')
  636.          COL(52)  STRING('In A New')
  637.            ROW(5,21)  STRING('To A')
  638.          COL(52)  STRING('Name Here')
  639.            ROW(6,21)  STRING('Name Here')
  640.            ROW(12,30) STRING('Active File')
  641.            ROW(15,8)  STRING('Use the Up,  Down Arrow Keys to Select a '   |
  642.                 & 'File from the')
  643.            ROW(16,8)  STRING('List on the Left, or Press  Esc to Enter a ' |
  644.                 & 'Filename in')
  645.            ROW(17,8)  STRING('the space on the Right.')
  646.            ROW(19,7)  STRING('Press Enter to Activate Desired File(File '  |
  647.                 & 'will be CREATED')
  648.            ROW(20,7)  STRING('if Necessary).  Press Ctrl_D to  Delete the' |
  649.                 & ' File From the')
  650.            ROW(21,7)  STRING('List and the DOS Directory.')
  651.            ROW(23,16) STRING('Press Ctrl_Enter or Ctrl_Esc to Return.')
  652.            ROW(24,15) STRING('(A File Must Be Active Before Returning.)')
  653.               REPEAT(10),INDEX(INDEX)
  654.            ROW(3,10)    POINT(1,8),USE(?POINT),ESC(?ACT:APPT_NAME),REQ
  655. NAME         COL(10)    STRING(8)
  656.               .
  657.            ROW(7,52)  ENTRY(@S8),USE(ACT:APPT_NAME),OVR,LFT,UPR
  658. SAVNAME           ROW(13,31) STRING(8)
  659.          .
  660.  
  661. FILE_ERROR   SCREEN      WINDOW(5,34),PRE(FLR),HUE(7,4)
  662.  OMIT('**-END-**')
  663.                ╔══FILE═ERROR════════════════════╗
  664.                ║                ║
  665.                ║ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ║
  666.                ║                ║
  667.                ╚══════════════════Press═a═Key═══╝
  668. **-END-**
  669.  
  670.            ROW(1,1)      STRING('<201,205{2},0{4},205,0{5},205{20},187>')
  671.            ROW(2,1)      REPEAT(3);STRING('<186,0{32},186>') .
  672.            ROW(5,1)      STRING('<200,205{18},0{5},205,0,205,0{3},205{3},188>')
  673.            ROW(1,4)      STRING('FILE')
  674.          COL(9)      STRING('ERROR')
  675.            ROW(5,20)  STRING('Press')
  676.          COL(26)  STRING('a')
  677.          COL(28)  STRING('Key')
  678. ERROR           ROW(3,3)      STRING(30),REV
  679.          .
  680.  
  681.          EJECT
  682. CREATE_WND   SCREEN      WINDOW(5,24),HUE(0,2)
  683.  OMIT('**-END-**')
  684.           ╔══════════════════════╗
  685.           ║                 ║
  686.           ║ CREATING A NEW FILE  ║
  687.           ║                 ║
  688.           ╚══════════════════════╝
  689. **-END-**
  690.  
  691.            ROW(1,1)      STRING('<201,205{22},187>')
  692.            ROW(2,1)      REPEAT(3);STRING('<186,0{22},186>') .
  693.            ROW(5,1)      STRING('<200,205{22},188>')
  694.            ROW(3,3)      STRING('CREATING A NEW FILE'),REV,BLK
  695.          .
  696. INDEX         BYTE
  697.  
  698.   CODE
  699.   ALERT                         !CLEAR ALERT KEYS
  700.   ALERT(Ctrl_D)                     !DELETE A FILENAME ENTRY
  701.   ALERT(Ctrl_Enter)                 !RETURN
  702.   ALERT(Ctrl_Esc)                 !RETURN
  703.   CLOSE(APPOINTS)                 !CLOSE FILE IF OPEN
  704.   OPEN(CTL_LIST)                 !OPEN WINDOW
  705.   LST:SAVNAME = CENTER(ACT:APPT_NAME)         !SHOW CURRENT ACTIVE FILE AND
  706.                          ! SAVE FOR REUSE
  707.   LOOP
  708.    SET(CTL:NAME_KEY)                 !PROCESS IN NAME ORDER
  709.    INDEX = 0                     !SET REPEAT INDEX
  710.    LOOP UNTIL EOF(APPT_CTL) OR INDEX = 10     !GET ALL FILE NAMES(MAX OF TEN)
  711.     NEXT(APPT_CTL)                 !GET NEXT RECORD
  712.     INDEX += 1                     !INCREMENT REPEAT INDEX
  713.     LST:NAME = CTL:NAME                 !SHOW FILE NAME
  714.    .
  715.    LOOP INDEX = INDEX + 1 TO 10             !CLEAR OUT UNUSED REPEAT
  716.     CLEAR(LST:NAME)                 ! STRINGS
  717.    .
  718.    ERASE(?ACT:APPT_NAME)             !CLEAR ENTRY FIELD
  719.    INDEX = 1                     !POINT TO FIRST ENTRY
  720.    IF LST:NAME THEN SELECT(?POINT).         !SELECT LIST IF NOT EMPTY
  721.    ACCEPT                     !WAIT FOR KEY
  722.    CASE KEYCODE()
  723.    OF ENTER_KEY                     !SELECT OR CREATE A FILE
  724.       CASE FIELD()
  725.       OF ?POINT                     !GET NAME FROM LIST
  726.      ACT:APPT_NAME = LST:NAME         !SET UP NAME FOR OPEN
  727.       OF ?ACT:APPT_NAME                 !GET NAME FROM USER
  728.      IF ~ACT:APPT_NAME OR RECORDS(APPT_CTL) > 9 !IF LEFT BLANK
  729.          BEEP                 ! OR NO ROOM THEN CYCLE
  730.          CYCLE
  731.       .     .
  732.       DO CREATE_FILE                 !GO OPEN FILE, CREATE IF NEEDED
  733.    OF Ctrl_D                     !DELETE A FILE
  734.       IF FIELD() = ?POINT             !GET NAME FROM LIST
  735.      ACT:APPT_NAME = LST:NAME         !SET UP NAME FOR DELETE
  736.      DO DELETE_FILE                 !AND DELETE IT
  737.       ELSE
  738.      BEEP                     !CAN ONLY DELETE FROM LIST
  739.       .
  740.    OF Ctrl_Enter OROF Ctrl_Esc             !RETURN TO CALLER
  741.       IF ~LST:SAVNAME THEN CYCLE.         !IF NO 'ACTIVE' FILE THEN CYCLE
  742.       ACT:APPT_NAME = LEFT(LST:SAVNAME)         !RESET FILENAME
  743.       RETURN                     !
  744.   ..
  745.  
  746. CREATE_FILE  ROUTINE                 !OPEN OR CREATE NEW FILE
  747.      CLOSE(APPOINTS)             !CLOSE ANY ACTIVE FILE
  748.      SHARE(APPOINTS)             !ATTEMPT TO OPEN
  749.      IF ERROR()                 !IF NOT SUCCESSFUL
  750.         IF ERRORCODE() = NOFILE_ERR         !AND FILE NOT FOUND
  751.            OPEN(CREATE_WND)             !  DISPLAY A MESSAGE
  752.            CREATE(APPOINTS)             !  THEN CREATE NEW FILE
  753.            IF ERROR()             !     SHOW CREATE ERROR
  754.           DO SHOW_ERROR             !    IF NECESSARY
  755.           CLOSE(CREATE_WND)         !     CLOSE WINDOW
  756.           EXIT                 !     TRY AGAIN
  757.            .
  758.            CTL:NAME = LEFT(ACT:APPT_NAME)     !  SETUP TO PUT IN APPT_CTL FILE
  759.            ADD(APPT_CTL)             !  ADD NEW FILENAME TO APPT_CTL
  760.            IF ERROR() THEN DO SHOW_ERROR.     !  SHOW ADD ERROR IF NEEDED
  761.            CLOSE(CREATE_WND)         !  CLOSE WINDOW
  762.         ELSE
  763.            DO SHOW_ERROR             ! ELSE SHOW OPEN ERROR
  764.            EXIT                 ! TRY AGAIN
  765.      .  .
  766.      LST:SAVNAME = CENTER(ACT:APPT_NAME)     ! DISPLAY NEW ACTIVE FILE
  767.  
  768. DELETE_FILE  ROUTINE                 !DELETE THE APPOINTMENT FILE
  769.      IF ACT:APPT_NAME = LEFT(LST:SAVNAME)     !IF DELETING CURRENT ACTIVE
  770.         CLEAR(LST:SAVNAME)             ! FILE CLEAR STRING ON SCREEN
  771.      .
  772.      CLOSE(APPOINTS)             !CLOSE FILE SO THAT IT CAN BE
  773.      SHARE(APPOINTS)             !TESTED BY OPENING FOR AN
  774.      IF ERROR()                 !ERROR, IF THERE IS ONE THEN
  775.         DO SHOW_ERROR             !DISPLAY IT AND DO NOT DELETE
  776.                          !THE FILE FROM THE DISK
  777.      ELSE                     ! IF NO ERROR THEN DELETE FILE
  778.         CLOSE(APPOINTS)             !MUST CLOSE FILE BEFORE REMOVE
  779.         REMOVE(APPOINTS)             !REMOVE FILE FROM DISK
  780.      .
  781.      CTL:NAME = ACT:APPT_NAME         !SETUP TO DELETE FROM APPT_CTL
  782.      GET(APPT_CTL,NAME_KEY)             !DELETE THE APPT_CTL ENRTY
  783.      IF ~ERROR() THEN DELETE(APPT_CTL).     !     FOR THE FILE
  784.  
  785. SHOW_ERROR   ROUTINE                 !DISPLAY OPEN AND CREATE ERROR
  786.            OPEN(FILE_ERROR)             !OPEN WINDOW
  787.            FLR:ERROR = ERROR()         !DISPLAY ERROR
  788.            FLR:ERROR = CENTER(FLR:ERROR)     !CENTER ERROR
  789.            ASK                 !WAIT FOR ANY KEY
  790.            CLOSE(FILE_ERROR)         !CLOSE WINDOW
  791.