home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
clarion
/
clarmemo.zip
/
MEMTEST.CLA
< prev
next >
Wrap
Text File
|
1991-12-30
|
30KB
|
747 lines
MEMTEST PROGRAM
INCLUDE('STD_KEYS.CLA')
INCLUDE('CTL_KEYS.CLA')
INCLUDE('ALT_KEYS.CLA')
INCLUDE('SHF_KEYS.CLA')
REJECT_KEY EQUATE(CTRL_ESC)
ACCEPT_KEY EQUATE(CTRL_ENTER)
TRUE EQUATE(1)
FALSE EQUATE(0)
MAP
PROC(G_OPENFILES)
PROC(SetMemMsg)
PROC(PauseMsg)
FUNC(AbortEdit_),STRING
PROC(MAINMENU) !memo test application
PROC(SHO_KEY) !Show Memtest By Key
PROC(UPD_MEMTEST) !Update Memtest
MODULE('ALERTED'),BINARY
FUNC(ALERTED),LONG !ALERTED FUNCTION
.
MODULE('INTERUPT'),BINARY
PROC(INTERRUPT) !INTERRUPT LEM
.
MODULE('MEMOEDIT')
FUNC(MEMOEDIT),LONG !MEMO EDIT PROCEDURE
.
.
EJECT('FILE LAYOUTS')
MEMTEST FILE,PRE(FIL),CREATE,RECLAIM
BY_KEY KEY(FIL:KEY),NOCASE,OPT
DATA3 MEMO(4560)
RECORD RECORD
KEY STRING(4)
DATA1 STRING(30)
DATA2 STRING(30)
. .
GROUP,OVER(FIL:DATA3)
FIL_MEMO_ROW STRING(76),DIM(60)
.
EJECT('GLOBAL MEMORY VARIABLES')
ACTION SHORT !0 = NO ACTION
!1 = ADD RECORD
!2 = CHANGE RECORD
!3 = DELETE RECORD
!4 = LOOKUP FIELD
!5 = AUTONUMKEY ADD
Idle_Kill SHORT ! IDLE Kill switch (new b.g.)
Menu_Nesc SHORT !Menu Escape switch (new b.g.)
AbortEdg BYTE !AbortEdit_ control (new b.g.)
GROUP,PRE(MEM)
MESSAGE STRING(30) !Global Message Area
PAGE SHORT !Report Page Number
LINE SHORT !Report Line Number
DEVICE STRING(30) !Report Device Name
.
!************************************************************** (new b.g.)
! MessageScrn_ SCREEN * (new b.g.)
!************************************************************** (new b.g.)
MessageScrn_ SCREEN WINDOW(3,80),AT(23,1),HUE(15,1) ! (new b.g.)
ROW(1,1) STRING('╔═{78}╗') ! (new b.g.)
ROW(2,1) STRING('║<0{78}>║') ! (new b.g.)
ROW(3,1) STRING('╚═{78}╝') ! (new b.g.)
Message_ ROW(2,2) STRING(78),HUE(11,1) ! (new b.g.)
. ! (new b.g.)
!*************************************************************! (new b.g.)
EJECT('CODE SECTION')
CODE
SETHUE(7,0) !SET WHITE ON BLACK
BLANK ! AND BLANK
Idle_Kill = False ! Clear the IDLE switch (new b.g.)
AbortEdg = False !AbortEdit_ control (new b.g.)
HELP('MEMOEDIT.HLP') !OPEN THE HELP FILE
G_OPENFILES !OPEN OR CREATE FILES
SETHUE() ! THE SCREEN
MAINMENU !memo test application
RETURN !EXIT TO DOS
G_OPENFILES PROCEDURE !OPEN FILES & CHECK FOR ERROR
CODE
SHOW(25,1,CENTER('Opening File: ' & 'MEMTEST',80)) !DISPLAY FILE NAME
OPEN(MEMTEST) !OPEN THE FILE
IF ERROR() !OPEN RETURNED AN ERROR
CASE ERRORCODE() ! CHECK FOR SPECIFIC ERROR
OF 46 ! KEYS NEED TO BE REQUILT
SETHUE(0,7) ! BLACK ON WHITE
SHOW(25,1,CENTER('Rebuilding Key Files For MEMTEST',80)) !INDICATE MSG
BUILD(MEMTEST) ! CALL THE BUILD PROCEDURE
SETHUE(7,0) ! WHITE ON BLACK
BLANK(25,1,1,80) ! BLANK THE MESSAGE
OF 2 !IF NOT FOUND,
CREATE(MEMTEST) ! CREATE
ELSE ! ANY OTHER ERROR
LOOP ! STOP EXECUTION
STOP('Cannot Open MEMTEST - Error: ' & ERROR())
.
. .
BLANK !BLANK THE SCREEN
!************************************************************** (new b.g.)
! SetMemMsg procedure * (new b.g.)
!************************************************************** (new b.g.)
SetMemMsg PROCEDURE ! (new b.g.)
CODE ! (new b.g.)
EXECUTE ACTION ! (new b.g.)
MEM:MESSAGE='Record will be Added' ! (new b.g.)
MEM:MESSAGE='Record will be Changed' ! (new b.g.)
MEM:MESSAGE='Press Enter to Delete' ! (new b.g.)
. ! (new b.g.)
!************************************************************** (new b.g.)
! PauseMsg procedure * (new b.g.)
!************************************************************** (new b.g.)
PauseMsg PROCEDURE(Msg_) ! (new b.g.)
Msg_ STRING(80) ! (new b.g.)
code ! (new b.g.)
open(MessageScrn_) ! (new b.g.)
Message_ = center(Msg_,size(Message_)) ! (new b.g.)
beep(800,20) ! (new b.g.)
beep(800,20); ask ! (new b.g.)
close(MessageScrn_) ! (new b.g.)
!************************************************************** (new b.g.)
! AbortEdit_ Function * (new b.g.)
!************************************************************** (new b.g.)
AbortEdit_ FUNCTION ! (new b.g.)
Screen SCREEN WINDOW(8,43),AT(18,20),HUE(15,4) ! (new b.g.)
ROW(1,1) STRING('╔═{41}╗') ! (new b.g.)
ROW(2,1) REPEAT(6);STRING('║<0{41}>║') . ! (new b.g.)
ROW(8,1) STRING('╚═{41}╝') ! (new b.g.)
ROW(2,13) STRING('Lose Your Changes?'),BLK ! (new b.g.)
ROW(4,4) STRING('Ctrl-Esc') ! (new b.g.)
COL(16) STRING('Quit (and Lose Changes)') ! (new b.g.)
ROW(5,4) STRING('Ctrl-Enter') ! (new b.g.)
COL(16) STRING('Quit after Saving Changes') ! (new b.g.)
ROW(7,10) STRING('Any other key to continue') ! (new b.g.)
ROW(3,25) ENTRY,USE(?First_Field) ! (new b.g.)
. ! (new b.g.)
Code ! (new b.g.)
Open(Screen); Setcursor; Beep(800,20) ! (new b.g.)
LOOP ! (new b.g.)
ASK ! (new b.g.)
CASE KEYCODE() ! (new b.g.)
OF Accept_Key; RETURN('S') ! (new b.g.)
OF Reject_Key; RETURN('Y') ! (new b.g.)
OF Esc_Key; BEEP(800,20); CYCLE ! (new b.g.)
ELSE RETURN('N') ! (new b.g.)
. . ! (new b.g.)
EJECT ('memo test application')
MAINMENU PROCEDURE
SCREEN SCREEN PRE(SCR),WINDOW(12,30),HUE(15,3)
ROW(1,1) STRING('<201,205{28},187>'),HUE(15,3)
ROW(2,1) REPEAT(10);STRING('<186,0{28},186>'),HUE(15,3) .
ROW(12,1) STRING('<200,205{28},188>'),HUE(15,3)
ROW(2,6) STRING('memo test application')
DATE ROW(4,12) STRING(@D1),HUE(15,3)
ENTRY,USE(?FIRST_FIELD)
ENTRY,USE(?PRE_MENU)
MENU,USE(MENU_FIELD"),REQ
ROW(6,7) STRING('Show Memtest By Key'),HUE(1,3),SEL(0,7)
ROW(10,14) STRING('Quit'),HUE(1,3),SEL(0,7)
. .
EJECT
CODE
OPEN(SCREEN) !OPEN THE MENU SCREEN
SETCURSOR !TURN OFF ANY CURSOR
MENU_FIELD" = '' !START MENU WITH FIRST ITEM
Idle_Kill = false !clear the idle switch (new b.g.)
Menu_Nesc = false !clear the menu escape (new b.g.)
LOOP !LOOP UNTIL USER EXITS
SCR:DATE = TODAY()
ALERT !TURN OFF ALL ALERTED KEYS
ALERT(REJECT_KEY) !ALERT SCREEN REJECT KEY
ALERT(ACCEPT_KEY) !ALERT SCREEN ACCEPT KEY
ACCEPT !READ A FIELD OR MENU CHOICE
IF KEYCODE() = REJECT_KEY THEN !RETURN ON SCREEN REJECT
if Menu_Nesc then BEEP(800,20) !Menu Nesc proc (new b.g.)
LOOP WHILE KEYBOARD(); ASK.; CYCLE. !Menu Nesc proc (new b.g.)
if Idle_Kill then IDLE(). !Idle Kill proc (new b.g.)
Idle_Kill = false !Idle Kill proc (new b.g.)
RETURN !
. !
IF KEYCODE() = ACCEPT_KEY !ON SCREEN ACCEPT KEY
UPDATE ! MOVE ALL FIELDS FROM SCREEN
SELECT(?) ! START WITH CURRENT FIELD
SELECT ! EDIT ALL FIELDS
CYCLE ! GO TO TOP OF LOOP
. !
CASE FIELD() !JUMP TO FIELD EDIT ROUTINE
OF ?FIRST_FIELD !FROM THE FIRST FIELD
IF KEYCODE() = ESC_KEY THEN ! RETURN ON ESC KEY
if Menu_Nesc then BEEP(800,20); ACCEPT !Menu Nesc proc (new b.g.)
LOOP WHILE KEYBOARD(); ASK.; CYCLE. !Menu Nesc proc (new b.g.)
if Idle_Kill then IDLE(). !Idle Kill proc (new b.g.)
Idle_Kill = false !Idle Kill proc (new b.g.)
RETURN !
. !
OF ?PRE_MENU !PRE MENU FIELD CONDITION
IF KEYCODE() = ESC_KEY ! BACKING UP?
SELECT(?-1) ! SELECT PREVIOUS FIELD
ELSE ! GOING FORWARD
SELECT(?+1) ! SELECT MENU FIELD
.
OF ?MENU_FIELD" !FROM THE MENU FIELD
if Idle_Kill then IDLE(). !Idle Kill proc (new b.g.)
Idle_Kill = false !Idle Kill proc (new b.g.)
EXECUTE CHOICE() ! CALL THE SELECTED PROCEDURE
SHO_KEY ! Show Memtest By Key
RETURN
. . .
EJECT ('Show Memtest By Key')
SHO_KEY PROCEDURE
SCREEN SCREEN PRE(SCR),WINDOW(25,74),HUE(15,1)
ROW(6,3) PAINT(17,70),HUE(0,7)
ROW(1,1) STRING('<201,205{72},187>'),HUE(15,1)
ROW(2,1) REPEAT(23);STRING('<186,0{72},186>'),HUE(15,1) .
ROW(25,1) STRING('<200,205{72},188>'),HUE(15,1)
ROW(2,29) STRING('Show Memtest By Key')
ROW(4,33) STRING('LOCATE:'),HUE(11,1)
ROW(23,12) STRING('Ins to Add'),HUE(11,1)
COL(49) STRING('Enter to Change'),HUE(11,1)
ROW(24,12) STRING('Del to Delete'),HUE(11,1)
COL(48) STRING('Ctrl-Esc to Exit'),HUE(11,1)
LOCATOR ROW(4,40) STRING(4),HUE(11,1)
ENTRY,USE(?FIRST_FIELD)
ENTRY,USE(?PRE_POINT)
REPEAT(17),EVERY(1),INDEX(NDX)
ROW(6,4) POINT(1,68),USE(?POINT),ESC(?-1)
KEY COL(5) STRING(4)
DATA1 COL(10) STRING(30)
DATA2 COL(41) STRING(30)
. .
NDX BYTE !REPEAT INDEX FOR POINT AREA
ROW BYTE !ACTUAL ROW OF SCROLL AREA
COL BYTE !ACTUAL COLUMN OF SCROLL AREA
COUNT BYTE(17) !NUMBER OF ITEMS TO SCROLL
ROWS BYTE(17) !NUMBER OF ROWS TO SCROLL
COLS BYTE(68) !NUMBER OF COLUMNS TO SCROLL
FOUND BYTE !RECORD FOUND FLAG
NEWPTR LONG !POINTER TO NEW RECORD
TABLE TABLE,PRE(TBL) !TABLE OF RECORD DATA
PTR LONG ! POINTER TO FILE RECORD
KEY STRING(4)
DATA1 STRING(30)
DATA2 STRING(30)
.
EJECT
CODE
ACTION# = ACTION !SAVE ACTION
OPEN(SCREEN) !OPEN THE SCREEN
SETCURSOR !TURN OFF ANY CURSOR
TBL:PTR = 1 !START AT TABLE ENTRY
NDX = 1 !PUT SELECTOR BAR ON TOP ITEM
ROW = ROW(?POINT) !REMEMBER TOP ROW AND
COL = COL(?POINT) !LEFT COLUMN OF SCROLL AREA
RECORDS# = TRUE !INITIALIZE RECORDS FLAG
CACHE(FIL:BY_KEY,.25) !CACHE KEY FILE
IF ACTION = 4 ! TABLE LOOKUP REQUEST
NEWPTR = POINTER(MEMTEST) ! SET POINTER TO RECORD
IF NOT NEWPTR ! RECORD NOT PASSED TO TABLE
SET(FIL:BY_KEY,FIL:BY_KEY) ! POSITION TO CLOSEST RECORD
NEXT(MEMTEST) ! READ RECORD
NEWPTR = POINTER(MEMTEST) ! SET POINTER
.
DO FIND_RECORD ! POSITION FILE
ELSE
NDX = 1 ! PUT SELECTOR BAR ON TOP ITEM
DO FIRST_PAGE ! BUILD MEMORY TABLE OF KEYS
.
RECORDS# = TRUE ! ASSUME THERE ARE RECORDS
LOOP !LOOP UNTIL USER EXITS
ACTION = ACTION# !RESTORE ACTION
ALERT !RESET ALERTED KEYS
ALERT(REJECT_KEY) !ALERT SCREEN REJECT KEY
ALERT(ACCEPT_KEY) !ALERT SCREEN ACCEPT KEY
ALERT(UP_KEY) ! New b.g.
ALERT(DOWN_KEY) ! New b.g.
ALERT(LEFT_KEY) ! New b.g.
ALERT(RIGHT_KEY) ! New b.g.
ALERT(TAB_KEY) ! New b.g.
ALERT(SHFT_TAB) ! New b.g.
ALERT(HOME_KEY) ! New b.g.
ALERT(END_KEY) ! New b.g.
ACCEPT !READ A FIELD
IF KEYCODE() = REJECT_KEY !ON SCREEN REJECT KEY
FREE(FIL:BY_KEY) ! FREE THE CACHE
RETURN ! AND RETURN TO CALLER
.
IF KEYCODE() = ACCEPT_KEY | !ON SCREEN ACCEPT KEY
AND FIELD() <> ?POINT !BUT NOT ON THE POINT FIELD
UPDATE ! MOVE ALL FIELDS FROM SCREEN
SELECT(?) ! START WITH CURRENT FIELD
SELECT ! EDIT ALL FIELDS
CYCLE ! GO TO TOP OF LOOP
.
CASE FIELD() !JUMP TO FIELD EDIT ROUTINE
OF ?FIRST_FIELD !FROM THE FIRST FIELD
IF KEYCODE() = ESC_KEY | ! RETURN ON ESC KEY
OR RECORDS# = FALSE ! OR NO RECORDS
BREAK ! EXIT PROCEDURE
.
OF ?PRE_POINT !PRE POINT FIELD CONDITION
IF KEYCODE() = ESC_KEY ! BACKING UP?
SELECT(?-1) ! SELECT PREVIOUS FIELD
ELSE ! GOING FORWARD
SELECT(?POINT) ! SELECT MENU FIELD
.
IF KEYCODE() = ESC_KEY ! BACKING UP?
SCR:LOCATOR = '' ! CLEAR LOCATOR
SETCURSOR ! AND TURN CURSOR OFF
ELSE ! GOING FORWARD
LEN# = 0 ! RESET TO START OF LOCATOR
SETCURSOR(ROW(SCR:LOCATOR),COL(SCR:LOCATOR)) !AND TURN CURSOR ON
.
OF ?POINT !PROCESS THE POINT FIELD
IF RECORDS(TABLE) = 0 !IF THERE ARE NO RECORDS
CLEAR(FIL:RECORD) ! CLEAR RECORD AREA
UPDATE ! UPDATE ALL FIELDS
ACTION = 1 ! SET ACTION TO ADD
GET(MEMTEST,0) ! CLEAR PENDING RECORD
UPD_MEMTEST ! CALL FORM FOR NEW RECORD
NEWPTR = POINTER(MEMTEST) ! SET POINTER TO NEW RECORD
DO FIRST_PAGE ! DISPLAY THE FIRST PAGE
IF RECORDS(TABLE) = 0 ! IF THERE AREN'T ANY RECORDS
RECORDS# = FALSE ! INDICATE NO RECORDS
SELECT(?PRE_POINT-1) ! SELECT THE PRIOR FIELD
.
CYCLE ! AND LOOP AGAIN
.
IF KEYCODE() > 31 | !THE DISPLAYABLE CHARACTERS
AND KEYCODE() < 255 !ARE USED TO LOCATE RECORDS
IF LEN# < SIZE(SCR:LOCATOR) ! IF THERE IS ROOM LEFT
SCR:LOCATOR = SUB(SCR:LOCATOR,1,LEN#) & CHR(KEYCODE())
LEN# += 1 ! INCREMENT THE LENGTH
.
ELSIF KEYCODE() = BS_KEY !BACKSPACE UNTYPES A CHARACTER
IF LEN# > 0 ! IF THERE ARE CHARACTERS LEFT
LEN# -= 1 ! DECREMENT THE LENGTH
SCR:LOCATOR = SUB(SCR:LOCATOR,1,LEN#) ! ERASE THE LAST CHARACTER
.
ELSE !FOR ANY OTHER CHARACTER
LEN# = 0 ! ZERO THE LENGTH
SCR:LOCATOR = '' ! ERASE THE LOCATOR FIELD
.
SETCURSOR(ROW(SCR:LOCATOR),COL(SCR:LOCATOR)+LEN#) !AND RESET THE CURSOR
FIL:KEY = CLIP(SCR:LOCATOR) ! UPDATE THE KEY FIELD
IF KEYBOARD() > 31 | !THE DISPLAYABLE CHARACTERS
AND KEYBOARD() < 255 | !ARE USED TO LOCATE RECORDS
OR KEYBOARD() = BS_KEY !INCLUDE BACKSPACE
CYCLE
.
IF LEN# > 0 !ON A LOCATOR REQUEST
FIL:KEY = CLIP(SCR:LOCATOR) ! UPDATE THE KEY FIELD
SET(FIL:BY_KEY,FIL:BY_KEY) ! POINT TO NEW RECORD
NEXT(MEMTEST) ! READ A RECORD
IF (EOF(MEMTEST) AND ERROR()) ! IF EOF IS REACHED
SET(FIL:BY_KEY) ! SET TO FIRST RECORD
PREVIOUS(MEMTEST) ! READ THE LAST RECORD
.
NEWPTR = POINTER(MEMTEST) ! SET NEW RECORD POINTER
SKIP(MEMTEST,-1) ! BACK UP TO FIRST RECORD
FREE(TABLE) ! CLEAR THE TABLE
DO NEXT_PAGE ! AND DISPLAY A NEW PAGE
.
CASE KEYCODE() !PROCESS THE KEYSTROKE
OF INS_KEY !INS KEY
CLEAR(FIL:RECORD) ! CLEAR RECORD AREA
ACTION = 1 ! SET ACTION TO ADD
GET(MEMTEST,0) ! CLEAR PENDING RECORD
UPD_MEMTEST ! CALL FORM FOR NEW RECORD
IF ~ACTION ! IF RECORD WAS ADDED
NEWPTR = POINTER(MEMTEST) ! SET POINTER TO NEW RECORD
DO FIND_RECORD ! POSITION IN FILE
.
OF ENTER_KEY !ENTER KEY
OROF ACCEPT_KEY !CTRL-ENTER KEY
DO GET_RECORD ! GET THE SELECTED RECORD
IF ACTION = 4 AND KEYCODE() = ENTER_KEY! IF THIS IS A LOOKUP REQUEST
ACTION = 0 ! SET ACTION TO COMPLETE
BREAK ! AND RETURN TO CALLER
.
IF ~ERROR() ! IF RECORD IS STILL THERE
ACTION = 2 ! SET ACTION TO CHANGE
UPD_MEMTEST ! CALL FORM TO CHANGE REC
IF ACTION THEN CYCLE. ! IF SUCCESSFUL RE-DISPLAY
.
NEWPTR = POINTER(MEMTEST) ! SET POINTER TO NEW RECORD
DO FIND_RECORD ! POSITION IN FILE
OF DEL_KEY !DEL KEY
DO GET_RECORD ! READ THE SELECTED RECORD
IF ~ERROR() ! IF RECORD IS STILL THERE
ACTION = 3 ! SET ACTION TO DELETE
UPD_MEMTEST ! CALL FORM TO DELETE
IF ~ACTION ! IF SUCCESSFUL
N# = NDX ! SAVE POINT INDEX
DO SAME_PAGE ! RE-DISPLAY
NDX = N# ! RESTORE POINT INDEX
. .
OF DOWN_KEY OROF RIGHT_KEY OROF TAB_KEY !DOWN ARROW KEY (New b.g.)
IF NDX < RECORDS(TABLE) ! New b.g.
NDX += 1 ! New b.g.
ELSE ! New b.g.
DO SET_NEXT ! POINT TO NEXT RECORD
DO FILL_NEXT ! FILL A TABLE ENTRY
IF FOUND ! FOUND A NEW RECORD
SCROLL(ROW,COL,ROWS,COLS,ROWS(?POINT)) ! SCROLL THE SCREEN UP
GET(TABLE,RECORDS(TABLE)) ! GET RECORD FROM TABLE
DO FILL_SCREEN ! DISPLAY ON SCREEN
. . ! New b.g.
OF PGDN_KEY !PAGE DOWN KEY
DO SET_NEXT ! POINT TO NEXT RECORD
DO NEXT_PAGE ! DISPLAY THE NEXT PAGE
OF CTRL_PGDN !CTRL-PAGE DOWN KEY
DO LAST_PAGE ! DISPLAY THE LAST PAGE
NDX = RECORDS(TABLE) ! POSITION POINT BAR
OF UP_KEY OROF LEFT_KEY OROF SHFT_TAB !UP ARROW KEY (New b.g.)
IF NDX > 1 THEN ! New b.g.
NDX -= 1 ! New b.g.
ELSE ! New b.g.
DO SET_PREV ! POINT TO PREVIOUS RECORD
DO FILL_PREV ! FILL A TABLE ENTRY
IF FOUND ! FOUND A NEW RECORD
SCROLL(ROW,COL,ROWS,COLS,-(ROWS(?POINT)))! SCROLL THE SCREEN DOWN
GET(TABLE,1) ! GET RECORD FROM TABLE
DO FILL_SCREEN ! DISPLAY ON SCREEN
. . ! New b.g.
OF PGUP_KEY !PAGE UP KEY
DO SET_PREV ! POINT TO PREVIOUS RECORD
DO PREV_PAGE ! DISPLAY THE PREVIOUS PAGE
OF CTRL_PGUP !CTRL-PAGE UP
DO FIRST_PAGE ! DISPLAY THE FIRST PAGE
NDX = 1 ! POSITION POINT BAR
OF HOME_KEY ! New b.g.
NDX = 1 ! New b.g.
OF END_KEY ! New b.g.
NDX = RECORDS(TABLE) ! New b.g.
. . .
FREE(TABLE) !FREE MEMORY TABLE
FREE(FIL:BY_KEY) !FREE CACHE
RETURN !AND RETURN TO CALLER
SAME_PAGE ROUTINE !DISPLAY THE SAME PAGE
GET(TABLE,1) ! GET THE FIRST TABLE ENTRY
DO FILL_RECORD ! FILL IN THE RECORD
SET(FIL:BY_KEY,FIL:BY_KEY,TBL:PTR) ! POSITION FILE
FREE(TABLE) ! EMPTY THE TABLE
DO NEXT_PAGE ! DISPLAY A FULL PAGE
FIRST_PAGE ROUTINE !DISPLAY FIRST PAGE
BLANK(ROW,COL,ROWS,COLS)
FREE(TABLE) ! EMPTY THE TABLE
CLEAR(FIL:RECORD,-1) ! CLEAR RECORD TO LOW VALUES
CLEAR(TBL:PTR) ! ZERO RECORD POINTER
SET(FIL:BY_KEY) ! POINT TO FIRST RECORD
LOOP NDX = 1 TO COUNT ! FILL UP THE TABLE
DO FILL_NEXT ! FILL A TABLE ENTRY
IF NOT FOUND THEN BREAK. ! GET OUT IF NO RECORD
.
NDX = 1 ! SET TO TOP OF TABLE
DO SHOW_PAGE ! DISPLAY THE PAGE
LAST_PAGE ROUTINE !DISPLAY LAST PAGE
NDX# = NDX ! SAVE SELECTOR POSITION
BLANK(ROW,COL,ROWS,COLS) ! CLEAR SCROLLING AREA
FREE(TABLE) ! EMPTY THE TABLE
CLEAR(FIL:RECORD,1) ! CLEAR RECORD TO HIGH VALUES
CLEAR(TBL:PTR,1) ! CLEAR PTR TO HIGH VALUE
SET(FIL:BY_KEY) ! POINT TO FIRST RECORD
LOOP NDX = COUNT TO 1 BY -1 ! FILL UP THE TABLE
DO FILL_PREV ! FILL A TABLE ENTRY
IF NOT FOUND THEN BREAK. ! GET OUT IF NO RECORD
. ! END OF LOOP
NDX = NDX# ! RESTORE SELECTOR POSITION
DO SHOW_PAGE ! DISPLAY THE PAGE
FIND_RECORD ROUTINE !POSITION TO SPECIFIC RECORD
SET(FIL:BY_KEY,FIL:BY_KEY,NEWPTR) !POSITION FILE
IF NEWPTR = 0 !NEWPTR NOT SET
NEXT(MEMTEST) ! READ NEXT RECORD
NEWPTR = POINTER(MEMTEST) ! SET NEWPTR
SKIP(MEMTEST,-1) ! BACK UP TO DISPLAY RECORD
.
FREE(TABLE) ! CLEAR THE RECORD
DO NEXT_PAGE ! DISPLAY A PAGE
NEXT_PAGE ROUTINE !DISPLAY NEXT PAGE
SAVECNT# = RECORDS(TABLE) ! SAVE RECORD COUNT
LOOP COUNT TIMES ! FILL UP THE TABLE
DO FILL_NEXT ! FILL A TABLE ENTRY
IF NOT FOUND ! IF NONE ARE LEFT
IF NOT SAVECNT# ! IF REBUILDING TABLE
DO LAST_PAGE ! FILL IN RECORDS
EXIT ! EXIT OUT OF ROUTINE
.
BREAK ! EXIT LOOP
. .
DO SHOW_PAGE ! DISPLAY THE PAGE
SET_NEXT ROUTINE !POINT TO THE NEXT PAGE
GET(TABLE,RECORDS(TABLE)) ! GET THE LAST TABLE ENTRY
DO FILL_RECORD ! FILL IN THE RECORD
SET(FIL:BY_KEY,FIL:BY_KEY,TBL:PTR) ! POSITION FILE
NEXT(MEMTEST) ! READ THE CURRENT RECORD
FILL_NEXT ROUTINE !FILL NEXT TABLE ENTRY
FOUND = FALSE ! ASSUME RECORD NOT FOUND
LOOP UNTIL EOF(MEMTEST) ! LOOP UNTIL END OF FILE
NEXT(MEMTEST) ! READ THE NEXT RECORD
FOUND = TRUE ! SET RECORD FOUND
DO FILL_TABLE ! FILL IN THE TABLE ENTRY
ADD(TABLE) ! ADD LAST TABLE ENTRY
GET(TABLE,RECORDS(TABLE)-COUNT) ! GET ANY OVERFLOW RECORD
DELETE(TABLE) ! AND DELETE IT
EXIT ! RETURN TO CALLER
.
PREV_PAGE ROUTINE !DISPLAY PREVIOUS PAGE
LOOP COUNT TIMES ! FILL UP THE TABLE
DO FILL_PREV ! FILL A TABLE ENTRY
IF NOT FOUND THEN BREAK. ! GET OUT IF NO RECORD
.
DO SHOW_PAGE ! DISPLAY THE PAGE
SET_PREV ROUTINE !POINT TO PREVIOUS PAGE
GET(TABLE,1) ! GET THE FIRST TABLE ENTRY
DO FILL_RECORD ! FILL IN THE RECORD
SET(FIL:BY_KEY,FIL:BY_KEY,TBL:PTR) ! POSITION FILE
PREVIOUS(MEMTEST) ! READ THE CURRENT RECORD
FILL_PREV ROUTINE !FILL PREVIOUS TABLE ENTRY
FOUND = FALSE ! ASSUME RECORD NOT FOUND
LOOP UNTIL BOF(MEMTEST) ! LOOP UNTIL BEGINNING OF FILE
PREVIOUS(MEMTEST) ! READ THE PREVIOUS RECORD
FOUND = TRUE ! SET RECORD FOUND
DO FILL_TABLE ! FILL IN THE TABLE ENTRY
ADD(TABLE,1) ! ADD FIRST TABLE ENTRY
GET(TABLE,COUNT+1) ! GET ANY OVERFLOW RECORD
DELETE(TABLE) ! AND DELETE IT
EXIT ! RETURN TO CALLER
.
SHOW_PAGE ROUTINE !DISPLAY THE PAGE
NDX# = NDX ! SAVE SCREEN INDEX
LOOP NDX = 1 TO RECORDS(TABLE) ! LOOP THRU THE TABLE
GET(TABLE,NDX) ! GET A TABLE ENTRY
DO FILL_SCREEN ! AND DISPLAY IT
IF TBL:PTR = NEWPTR ! SET INDEX FOR NEW RECORD
NDX# = NDX ! POINT TO CORRECT RECORD
. .
NDX = NDX# ! RESTORE SCREEN INDEX
NEWPTR = 0 ! CLEAR NEW RECORD POINTER
CLEAR(FIL:RECORD) ! CLEAR RECORD AREA
FILL_TABLE ROUTINE !MOVE FILE TO TABLE
TBL:KEY = FIL:KEY
TBL:DATA1 = FIL:DATA1
TBL:DATA2 = FIL:DATA2
TBL:PTR = POINTER(MEMTEST) ! SAVE RECORD POINTER
FILL_RECORD ROUTINE !MOVE TABLE TO FILE
FIL:KEY = TBL:KEY
FILL_SCREEN ROUTINE !MOVE TABLE TO SCREEN
SCR:KEY = TBL:KEY
SCR:DATA1 = TBL:DATA1
SCR:DATA2 = TBL:DATA2
GET_RECORD ROUTINE !GET SELECTED RECORD
GET(TABLE,NDX) ! GET TABLE ENTRY
GET(MEMTEST,TBL:PTR) ! GET THE RECORD
EJECT ('Update Memtest')
UPD_MEMTEST PROCEDURE
SCREEN SCREEN PRE(SCR),WINDOW(25,80),HUE(15,4)
ROW(1,1) STRING('<201,205{78},187>'),HUE(15,4)
ROW(2,1) REPEAT(23);STRING('<186,0{78},186>'),HUE(15,4) .
ROW(25,1) STRING('<200,205,0{25},205{52},188>'),HUE(15,4)
ROW(2,34) STRING('Update Memtest')
ROW(4,4) STRING('KEY :'),HUE(7,4)
ROW(5,4) STRING('DATA1:'),HUE(7,4)
ROW(6,4) STRING('DATA2:'),HUE(7,4)
ROW(25,3) STRING('[Editing'),HUE(15,4)
COL(12) STRING('/')
COL(14) STRING('Row-'),HUE(15,4)
COL(20) STRING(' Col-'),HUE(15,4)
COL(27) STRING(']'),HUE(15,4)
MESSAGE ROW(3,26) STRING(30),HUE(15,4)
DATA3 ROW(8,3) STRING(76),HUE(11,1)
EROW ROW(25,18) STRING(@P##P),HUE(14,4)
ECOL COL(25) STRING(@P##P),HUE(14,4)
ENTRY,USE(?FIRST_FIELD)
ROW(4,10) ENTRY(@s4),USE(FIL:KEY),REQ,HUE(15,4),SEL(0,7)
ROW(5,10) ENTRY(@s30),USE(FIL:DATA1),HUE(15,4),SEL(0,7)
ROW(6,10) ENTRY(@s30),USE(FIL:DATA2),HUE(15,4),SEL(0,7)
COL(47) PAUSE('press enter to file transaction') |
USE(?PAUSE_FIELD),HUE(15,4)
ENTRY,USE(?LAST_FIELD)
PAUSE(''),USE(?DELETE_FIELD)
.
Chk_Abort byte !AbortEdit_ control (new b.g.)
ChangedAb byte !AbortEdit_ control (new b.g.)
AbEdRt string(1) !AbortEdit_ control (new b.g.)
NextFrSw byte !NextForm/Deletes (new b.g.)
MultiAdd byte !MultiAdd control (new b.g.)
EJECT
CODE
OPEN(SCREEN) !OPEN THE SCREEN
SETCURSOR !TURN OFF ANY CURSOR
Chk_Abort = False; ChangedAb = False !AbortEdit_ control (new b.g.)
IF AbortEdg then Chk_Abort = True. !AbortEdit_ control (new b.g.)
NextFrSw = False !NextForm/Deletes (new b.g.)
MultiAdd = False !MultiAdd control (new b.g.)
Chk_Abort=True !CALL SETUP PROCEDURE
DISPLAY !DISPLAY THE FIELDS
LOOP !LOOP THRU ALL THE FIELDS
MEM:MESSAGE = CENTER(MEM:MESSAGE) !DISPLAY ACTION MESSAGE
DO CALCFIELDS !CALCULATE DISPLAY FIELDS
ALERT !RESET ALERTED KEYS
ALERT(ACCEPT_KEY) !ALERT SCREEN ACCEPT KEY
ALERT(REJECT_KEY) !ALERT SCREEN REJECT KEY
ACCEPT !READ A FIELD
IF REFER() AND ACTION <> 3 THEN !AbortEdit_ control (new b.g.)
ChangedAb = True. !AbortEdit_ control (new b.g.)
IF KEYCODE() = REJECT_KEY THEN !AbortEdit_ logic (new b.g.)
IF ~Chk_Abort OR ~ChangedAb THEN RETURN. !AbortEdit_ logic (new b.g.)
AbEdRt = AbortEdit_() !AbortEdit_ logic (new b.g.)
IF AbEdRt = 'Y' THEN RETURN. !AbortEdit_ logic (new b.g.)
IF AbEdRt = 'S' THEN UPDATE; SELECT(?) !AbortEdit_ logic (new b.g.)
SELECT; CYCLE. !AbortEdit_ logic (new b.g.)
SELECT(?); CYCLE !AbortEdit_ logic (new b.g.)
. !AbortEdit_ logic (new b.g.)
SetMemMsg !Sets Mem:Message (new b.g.)
IF KEYCODE() = ACCEPT_KEY !ON SCREEN ACCEPT KEY
UPDATE ! MOVE ALL FIELDS FROM SCREEN
SELECT(?) ! START WITH CURRENT FIELD
SELECT ! EDIT ALL FIELDS
CYCLE ! GO TO TOP OF LOOP
.
CASE FIELD() !JUMP TO FIELD EDIT ROUTINE
OF ?FIRST_FIELD !FROM THE FIRST FIELD
IF KEYCODE() = ESC_KEY THEN !AbortEdit_ logic (new b.g.)
IF ~Chk_Abort OR ~ChangedAb THEN RETURN. !AbortEdit_ logic (new b.g.)
AbEdRt = AbortEdit_() !AbortEdit_ logic (new b.g.)
IF AbEdRt = 'Y' THEN RETURN. !AbortEdit_ logic (new b.g.)
IF AbEdRt = 'S' THEN UPDATE; SELECT(?) !AbortEdit_ logic (new b.g.)
SELECT; CYCLE. !AbortEdit_ logic (new b.g.)
SELECT(?); CYCLE !AbortEdit_ logic (new b.g.)
. !AbortEdit_ logic (new b.g.)
IF ACTION = 3 THEN SELECT(?DELETE_FIELD).! OR CONFIRM FOR DELETE
OF ?FIL:KEY
IF DUPLICATE(FIL:BY_KEY) ! CHECK FOR DUPLICATE KEY
MEM:MESSAGE = 'Creates Duplicate Entry' ! MOVE AN ERROR MESSAGE
SELECT(?FIL:KEY) ! STAY ON THE SAME FIELD
BEEP ! SOUND THE KEYBOARD ALARM
CYCLE ! AND LOOP AGAIN
.
OF ?FIL:DATA2
i#=memoedit(fil_memo_row[],scr:data3,i#,15,scr:erow,scr:ecol)
OF ?PAUSE_FIELD !ON PAUSE FIELD
IF KEYCODE() <> ENTER_KEY| !IF NOT ENTER KEY
AND KEYCODE() <> ACCEPT_KEY| !AND NOT CTRL-ENTER KEY
AND KEYCODE() <> 0 !AND NOT NONSTOP MODE
BEEP ! SOUND KEYBOARD ALARM
SELECT(?PAUSE_FIELD) ! AND STAY ON PAUSE FIELD
.
OF ?LAST_FIELD !FROM THE LAST FIELD
EXECUTE ACTION ! UPDATE THE FILE
ADD(MEMTEST) ! ADD NEW RECORD
PUT(MEMTEST) ! CHANGE EXISTING RECORD
DELETE(MEMTEST) ! DELETE EXISTING RECORD
.
IF ERRORCODE() = 40 ! DUPLICATE KEY ERROR
MEM:MESSAGE = ERROR() ! DISPLAY ERR MESSAGE
SELECT(2) ! POSITION TO TOP OF FORM
CYCLE ! GET OUT OF EDIT LOOP
ELSIF ERROR() ! CHECK FOR UNEXPECTED ERROR
EXECUTE ACTION ! BUILD AN ERROR MESSAGE
ERROR" = 'Error: ' & ERROR() & ' ' | ! FOR ADDING
& 'Adding to MEMTEST'
ERROR" = 'Error: ' & ERROR() & ' ' | ! FOR CHANGE
& 'Changing MEMTEST'
ERROR" = 'Error: ' & ERROR() & ' ' | ! FOR DELETING
& 'Deleting from MEMTEST'
.
STOP(ERROR") ! HALT EXECUTION
.
ChangedAb = False !AbortEdit_ control (new b.g.)
ACTION = 0 ! SET ACTION TO COMPLETE
RETURN ! AND RETURN TO CALLER
OF ?DELETE_FIELD !FROM THE DELETE FIELD
IF KEYCODE() = ENTER_KEY | ! ON ENTER KEY
OR KEYCODE() = ACCEPT_KEY ! OR CTRL-ENTER KEY
SELECT(?LAST_FIELD) ! DELETE THE RECORD
ELSE ! OTHERWISE
BEEP ! BEEP AND ASK AGAIN
. . .
CALCFIELDS ROUTINE
IF FIELD() > ?FIRST_FIELD !BEYOND FIRST_FIELD?
IF KEYCODE() = 0 AND SELECTED() > FIELD() THEN EXIT. !GET OUT IF NOT NONSTOP
.
SCR:MESSAGE = MEM:MESSAGE
R# = ROW(SCR:DATA3) !SAVE ROW OF MEMO
C# = COL(SCR:DATA3) !SAVE COL OF MEMO
SETHUE(FOREHUE(R#,C#),BACKHUE(R#,C#)) !RETRIEVE COLOR OF MEMO
LOOP I# = 1 TO 15 !DISPLAY MEMO FIELD BY ROWS
SHOW(R#+I#-1,C#,FIL_MEMO_ROW[I#],@S76) !SHOW NEXT ROW
.
SETHUE !TURN OFF COLOR
SCR:EROW = 0
SCR:ECOL = 0