GDSX Manual
Service Routines
Extended General Device Support (GDSX) Manual–134303
8-27
^FNAMEEXPAND
I/O can be in process on a single open of a disk file. Multiple tasks use a semaphore
to control access to the publicly opened file in this example:
INT
DISKFILE,
.DISKSEM[0:3],
.DISKNAME[0:11];
.
PROC USER^INITIALIZE(PRIMARY);
INT PRIMARY;
BEGIN
DISKSEM[0] := DISKSEM[1] := DISKSEM[2] := 0;
CALL INIT^SEM(DISKSEM);
IF PRIMARY THEN
BEGIN
DISKNAME ':=' ["$XYZ SOME FILE "];
CALL ^FILE_OPEN(DISKNAME, DISKFILE, ...);
IF < THEN
BEGIN
.
produce suitable error message
.
CALL ^TERMINATE;!Stop GDSX process
END;
END;
END;
PROC DEVICE^HANDLER(FILE, ME, TYPE);
BEGIN
.
IF PSEM(DISKSEM, 200D) THEN
BEGIN
CALL ^READ(DISKFILE, BUFFER, ....);
IF = THEN
CALL ^AWAITIO(DISKFILE,....);
IF <> THEN
.
.
CALL VSEM(DISKSEM);
END
ELSE
BEGIN !UNABLE TO GET THE LOCK
.!WITHIN 2 SECONDS
.
END;
^FNAMEEXPAND
This procedure expands a partial file name from the compacted external form to the
12-word internal form usable by other file-system procedures. ^FNAMEEXPAND may
be called whether USCODE is converted or unconverted.