{ INCLUDE File SCH1.INC} PROCEDURE CursorOn; BEGIN Write(^[, 'B4'); END; PROCEDURE CursorOff; BEGIN Write(^[, 'C4'); END; PROCEDURE UnderOn; BEGIN Write(^[, 'B3'); END; PROCEDURE UnderOff; BEGIN Write(^[, 'C3'); END; PROCEDURE ReverseOn; BEGIN Write(^[, 'B0'); END; PROCEDURE ReverseOff; BEGIN Write(^[, 'C0'); END; PROCEDURE HMove(Xbgn,Xend,Y:Integer; Ch:Char); VAR I, NextI, DFlag, IPos : Integer; BEGIN If Xbgn < Xend Then DFlag := 1 Else DFlag := -1; GotoXY(Xbgn,Y); Write(Ch); Xbgn := Xbgn + DFlag; Xbgn := Xbgn*DFlag; Xend := Xend*DFlag; For I := Xbgn to Xend Do BEGIN Delay(20); IPos := I*DFlag; NextI := IPos - DFlag; GotoXY(NextI,Y); Write(' '); GotoXY(IPos,Y); Write(Ch); END; END; PROCEDURE VMove(Ybgn,Yend,X:Integer; Ch:Char); VAR J, NextJ, DFlag, JPos : Integer; BEGIN If Ybgn < Yend Then DFlag := 1 Else DFlag := -1; GotoXY(X,Ybgn); Write(Ch); Ybgn := Ybgn + DFlag; Ybgn := Ybgn*DFlag; Yend := Yend*DFlag; For J := Ybgn to Yend Do BEGIN Delay(40); JPos := J*DFlag; NextJ := JPos - DFlag; GotoXY(X,NextJ); Write(' '); GotoXY(X,JPos); Write(Ch); END; END; PROCEDURE SignOn; BEGIN ClrScr; CursorOff; HMove(1,32,10,'S'); VMove(1,10,34,'C'); HMove(80,36,10,'H'); VMove(24,10,38,'E'); VMove(1,10,40,'D'); VMove(24,10,42,'U'); HMove(80,44,10,'L'); HMove(80,46,10,'E'); GotoXY(37,12); Write('v', Version:1:1); GotoXY(32,14); Write(Programmer:1); GotoXY(28,16); Write('Last Update : ', LastUpdate); Delay(3000); CursorOn; END; {of SignOn} PROCEDURE SignOff; BEGIN ClrScr; GotoXY(30,12); Writeln('Have a good day!!'); END; {of SignOff} PROCEDURE StatusLine; BEGIN GotoXY(1,23); ClrEol; END; {of StatusLine} FUNCTION NoYes(I : Integer) : Boolean; VAR Ch : Char; Valid : Boolean; BEGIN Repeat Read(Kbd,Ch); If Ch In ['N', 'Y', 'n', 'y'] Then Valid := True Else Valid := False; If Not Valid Then Write(^G); Until Valid; If Ch In ['N', 'n'] Then NoYes := False Else Noyes := True; END; {of NoYes} PROCEDURE Menu; BEGIN CursorOff; GotoXY(IM,JM); UnderOn; Write('Command Sammary'); UnderOff; GotoXY(IM,JM + 2); Write('[^E] : Up Hour'); GotoXY(IM,JM + 3); Write('[^X] : Down Hour'); GotoXY(IM,JM + 4); Write('[ESC] : Enter Note'); GotoXY(IM,JM + 5); Write('[^C] : Cancel Note'); GotoXY(IM,JM + 6); Write('[^S] : Save/Resume'); GotoXY(IM,jM + 7); Write('[^T] : Delete Record'); GotoXY(IM,JM + 8); Write('[^D] : Display Dates'); GotoXY(IM,JM + 9); Write('[^P] : Save/Print'); GotoXY(IM,JM + 10); Write('[^F] : Save/Open File'); GotoXY(IM,JM + 11); Write('[^Q] : Save/Quit'); CursorOn; END; {of Menu} PROCEDURE Ucase; VAR Len, I : Integer; Ftemp : FileName; BEGIN Ftemp := ''; Len := Length(DataFile); For I := 1 To Len Do Ftemp := Ftemp + UpCase(DataFile[I]); DataFile := Ftemp; END; {of Ucase} PROCEDURE Error; BEGIN CreateMode := False; If IOResult = 0 Then NoError := True Else NoError := False; If Not NoError Then BEGIN Close(AptFile); ClrScr; GotoXY(12,7); Write(^G, 'Cannot find ', DataFile); GotoXY(12,9); Write('Do you want to create it (y/n) ? '); CreateMode := NoYes(1); If Not CreateMode Then BEGIN GotoXY(12,10); Write('Continue (y/n) ? '); If Not NoYes(1) Then Halt; END; END; END; {of Error} PROCEDURE OpenToUpdate; BEGIN Assign(AptFile, DataFile); {$I-} Reset(AptFile); {$I+} END; {of OpenToUpdate} PROCEDURE OpenToCreate; BEGIN Assign(AptFile, DataFile); Rewrite(AptFile); END; {of OpenToCreate} PROCEDURE EnterFile; VAR I : Integer; BEGIN Repeat ClrScr; GotoXY(12,7); Write('Enter Schedule File name : '); Readln(DataFile); GotoXY(12,7); Ucase; OpenToUpDate; Error; Until NoError Or CreateMode; If CreateMode Then BEGIN OpenToCreate; For I := HrBgn To HrEnd Do AptRec.Note[I] := Blank; END; END; {of EnterFile} PROCEDURE SearchDate; LABEL Found; VAR I, RecSize : Integer; Exist : Boolean; BEGIN Rec := 0; Exist := False; If CreateMode Then Goto Found; OpenToUpdate; RecSize := FileSize(AptFile); If RecSize = 0 Then Goto Found; While Rec < RecSize Do BEGIN Seek(AptFile,Rec); Flush(AptFile); Read(AptFile,AptRec); If AptRec.Date = Date1 Then BEGIN Exist := True; Goto Found; END; Rec := Succ(Rec); END; Found : With AptRec Do Date := Date1; If Not Exist Then For I := HrBgn To HrEnd Do AptRec.Note[I] := Blank; END; {ofSearchDate} PROCEDURE SetCal; VAR Yr, AcDays, I : Integer; Leap : Boolean; BEGIN Yr := Year - 80; Leap := False; If (Yr Mod 4 = 0) Then Leap := True; AcDays := 365*Yr + Yr Div 4 + 1; For I := 1 To Month Do AcDays := AcDays + DaysOfMonth[I]; AcDays := AcDays - DaysOfMonth[Month]; If (Month > 2) And Leap Then AcDays := Succ(AcDays); DayOfWeek := (AcDays + 2) Mod 7 + 1; DOM := DaysOfMonth[Month]; If Leap And (Month = 2) Then DOM := Succ(DOM); END; {of SetCal} PROCEDURE EnterDate; LABEL Retry; VAR Valid, ValidDay : Boolean; Y : Integer; BEGIN Repeat StatusLine; Write('Month (1-12) ? '); {$I-} Readln(Month); {$I+} If (Month In [1..12]) And (IOResult = 0) Then Valid := True Else Valid := False; If Not Valid Then Write(^G); Until Valid; Repeat StatusLine; Retry: Write('Day ? '); {$I-} Readln(Day); {$I+} If (Day In [1..31]) And (IOResult = 0) Then ValidDay := True Else ValidDay := False; If Not ValidDay Then Write(^G); Until ValidDay; Repeat StatusLine; Write('Year (80-99) ? '); {$I-} Readln(Year); {$I+} If (Year In [80..99]) And (IOResult = 0) Then Valid := True Else Valid := False; If Not Valid Then Write(^G); Until Valid; SetCal; If Not (Day In [1..DOM]) Then ValidDay := False Else ValidDay := True; If Not ValidDay Then BEGIN Write(^G); StatusLine; Y := 1900 + Year; Write('Invalid Day entered for ', MonthOfYear[Month]:1, ', ', Y:1,'.'); Write(' Please re-enter '); Goto Retry; END; END; {of EnterDate} PROCEDURE MakeDate; VAR I : Integer; BEGIN Str(Year:2,DY); Str(Month:2,DM); Str(Day:2,DD); Date1 := DY + '/' + DM + '/' + DD; For I := 1 To 8 Do If Date1[I] = ' ' Then Date1[I] := '0'; END; {of MakeDate} PROCEDURE Calendar; VAR J, K, Ih, Jh, Yr : Integer; BEGIN CursorOff; j := JC; Yr := 1900 + Year; Ih := (15 - Length(MonthOfYear[Month])) Div 2 + IC; Jh := Pred(JC); For K := 0 To 7 Do BEGIN GotoXY(IC,Jh + K); Write(' '); END; GotoXY(Ih,Jh); Write(MonthOfYear[Month]:1, ', ', Yr:1); GotoXY(IC,J); Write('Su Mo Tu We Th Fr Sa'); LowVideo; For K := 1 To DOM Do BEGIN DOW := (DayOfWeek + K - 2) Mod 7 + 1; GotoXY(3*(DOW - 1) + IC,J + 1); If K = Day Then NormVideo Else LowVideo; Write(K:2); If DOW = 7 Then J := Succ(J); END; NormVideo; CursorOn; END; {of Calendar}