|
|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 15968 (0x3e60)
Types: TextFile
Names: »URW.I«
└─⟦e0c43619c⟧ Bits:30005797 CR80 Disc pack ( Vol:FNJ1 861029/EC CR80 S/W Package II+III+IV+V+VII )
└─⟦this⟧ »CSP004_V0801.D!CSS193.D!URW.I«
"-----------------------------------------------------------------------
"
" PROJECT: -
"
" MODULE NAME: USER READ WRITE (URW) IMPORT DEFINITIONS
" MODULE ID NMB: CSS/193
" MODULE VERSION: 0202
" MODULE TYPE: PREFIX
" MODULE FILES: URW.I
" PREFIX FILES: - (UTH.I MUST BE INCLUDED IN SOURCE)
"
" SPECIFICATIONS: NONE
" AUTHOR/DATE: MJO/860116
"
" DELIVERABLE: YES
" SOURCE LANGUAGE: SWELL
" COMPILE COMPUTER: CR80
" TARGET COMPUTER: CR80
" OPER. SYSTEM: AMOS/XAMOS/MXAMOS
"
" SPECIAL INFO: URW.COMP.I IS A COMPRESSED VERSION OF URW.I
" WITH ALL COMMENTS LEFT OUT.
"
"-----------------------------------------------------------------------
"
" CHANGE RECORD
"
" VERSION AUTHOR/DATE DESCRIPTION OF CHANGE
" ------- ----------- ---------------------
" 0101 CSL/850304 INITIAL RELEASE
" 0102 CSL/850711 READUSERPARAMSEXT INTRODUCED
" 0103 CSL/850904 KEYWORDSIZE CHANGED TO TWO BYTES
" 0201 CSL/850916 FILE CREATION INTRODUCED
" 0202 MJO/860116 FIRST SCL-RELEASE
"
"-----------------------------------------------------------------------
%PAGE
" ERROR CODE DEFINITIONS "
" IMPORT " CONST
INIT1TROUBLES= #F1;
INIT2TROUBLES= #F2;
URW_ERROR_IN_IDENTIFIER= #F3;
URW_ERROR_IN_NUMBER= #F4;
URW_OVERFLOW_IN_NUMBER= #F5;
URW_UNDEFINED_FUNCTION= #FF;
URW_ERR_IN_CRE_PRM= #F7;
" IMPORT " CONST "BIT NUMBERS WHEN CREATE FILE"
URW_READ_FILE_AT = 0; "TRY TO READ FILE ATTR FROM STREAM"
URW_DEF_FILE_AT = 1; "DEFAULT FILE ATTRIBUTES PROVIDED"
URW_OUT_FILE_CRE = 2; "WRITE ON CURRENT OUTPUT IF CREATED"
" IMPORT " TYPE
INOUT=
RECORD
XFLAG :BOOLEAN;
XFILETYPE :FILETYPE;
OLDADDRESS :POINTER;
PRIMARYADD :POINTER;
MODE :INTEGER;
FLUSHING :BOOLEAN;
END;
" IMPORT " TYPE
WRITE_FUNCTION = " R6 ALWAYS, CALL:<LINK> EXIT:<COMPLETION_CODE>
" R1 AT R2 AT
" CALL EXIT CALL EXIT
"
(WRITE_CLOSE, " - KEPT - KEPT
WRITE_OPEN, " @<FILETYPE> KEPT - KEPT
WRITE_RESET, " - KEPT - KEPT
WRITE_GETPOS, " @<LONG-RESULT> KEPT - KEPT
WRITE_SETPOS, " @<LONG-VALUE> KEPT - KEPT
WRITE_GETINF, " <FILE-INF-TYPE> <INFO-LEAST> - <INFO-MOST>
WRITE_FLUSH, " - KEPT - KEPT
WRITE_NOFLUSH, " - KEPT - KEPT
WRITE_ONE_FLUSH, " - KEPT - KEPT
WRITE_SPARE1, " ? ? ? ?
WRITE_SPARE2, " ? ? ? ?
WRITE_LINE, " @<LINE>(MAX 80) KEPT - KEPT
WRITE_RECORD, " @<RECORD> KEPT <LENGH-IN BYTES> KEPT
WRITE_DECIMAL, " <VALUE> KEPT <FIELD-WIDTH> KEPT
WRITE_DECIMAL_PAD, " <VALUE> KEPT <WIDTH,PADCHR> KEPT
WRITE_LONG_DECIMAL, " @<VALUE> KEPT <FIELD-WIDTH> KEPT
WRITE_LONG_DECIMAL_PAD," @<VALUE> KEPT <WIDTH,PADCHR> KEPT
WRITE_HEXA, " <VALUE> KEPT - KEPT
WRITE_HEXA_PAD, " <VALUE> KEPT <PAD-CHAR> KEPT
WRITE_LONG_HEXA, " @<VALUE> KEPT - KEPT
WRITE_LONG_HEXA_PAD, " @<VALUE> KEPT <CHR-M,CHR-L> KEPT
WRITE_NEWLINE, " - KEPT - KEPT
WRITE_NEWLINES, " <NO-OF-NEWLINES> KEPT - KEPT
WRITE_SPACES, " <NO-OF-SPACES> KEPT - KEPT
WRITE_FORMFEED, " - KEPT - KEPT
WRITE_BYTE, " <BYTE-VALUE> KEPT - KEPT
WRITE_TEXT, " @<BASE-REL-TEXT> KEPT - KEPT
WRITE_TEXT_P); " @<PROG-REL-TEXT> or 0 KEPT - KEPT
" If R1=0 the string is expected to be defined
" just after the procedure in quotes
" IMPORT " TYPE
READ_FUNCTION = " R6 ALWAYS, CALL:<LINK> EXIT:<COMPLETION_CODE>
" R1 AT R2 AT
" CALL EXIT CALL EXIT
"
(READ_CLOSE, " - KEPT - KEPT
READ_OPEN, " @<FILETYPE> KEPT - KEPT
READ_RESET, " - KEPT - KEPT
READ_GETPOS, " @<LONG-RESULT> KEPT - KEPT
READ_SETPOS, " @<LONG-VALUE> KEPT - KEPT
READ_GETINF, " <FILE-INF-TYPE> <INFO-LEAST> - <INFO-MOST>
DUM_FL, " - KEPT - KEPT
DUM_NOFL, " - KEPT - KEPT
DUM_ONEFL, " - KEPT - KEPT
READ_SPARE1, " ? ? ? ?
READ_SPARE2, " ? ? ? ?
READ_LINE, " @<LINE>(MAX 80) KEPT - <NO-OF-CHR>
READ_RECORD, " @<RECORD> KEPT <NO-OF-BYTES> UPDATED
READ_NUMBER, " @<RESULT> <RESULT> - KEPT
READ_LONG_NUMBER, " @<RESULT> KEPT - KEPT
READ_HEXA, " @<RESULT> <RESULT> - KEPT
READ_LONG_HEXA, " @<RESULT> KEPT - KEPT
READ_HEXINT, " @<RESULT> <RESULT> - KEPT
READ_LONG_HEXINT, " @<RESULT> KEPT - KEPT
READ_IDENTIFIER, " @<RESULT> KEPT - <NO-OF-CHR>
READ_CMD, " @<RECORD> KEPT <MAX-NO-OF-CHR> UPDATED
READ_BACKSPACE, " - KEPT - KEPT
READ_DONOT_CARES, " <NO-OF-BYTES> KEPT - KEPT
READ_BYTE, "
READ_SKIP_BLANKS); " - KEPT - KEPT
%PAGE
CONST " SHORTFORM COMMANDS MAY BE USED WHEN CONVENIENT "
" GENERAL COMMANDS FOR BOTH READ AND WRITE "
RWCLOSE = WRITE_CLOSE; " = READ_CLOSE "
RWOPEN = WRITE_OPEN; " = READ_OPEN "
RWRESET = WRITE_RESET; " = READ_RESET "
RWGETPOS = WRITE_GETPOS; " = READ_GETPOS "
RWSETPOS = WRITE_SETPOS; " = READ_SETPOS "
RWGETINF = WRITE_GETINF; " = READ_GETINF "
RWFL = WRITE_FLUSH; " = DUM_FL "
RWNOFL = WRITE_NOFLUSH; " = DUM_NOFL "
RW1FL = WRITE_ONE_FLUSH; " = DUM_ONEFL "
RWSPARE1 = WRITE_SPARE1; " = READ_SPARE1 "
RWSPARE2 = WRITE_SPARE2; " = READ_SPARE2 "
" COMMANDS FOR WRITE "
WLINE = WRITE_LINE;
WREC = WRITE_RECORD;
WDEC = WRITE_DECIMAL;
WDECP = WRITE_DECIMAL_PAD;
WLDEC = WRITE_LONG_DECIMAL;
WLDECP = WRITE_LONG_DECIMAL_PAD;
WHEX = WRITE_HEXA;
WHEXP = WRITE_HEXA_PAD;
WLHEX = WRITE_LONG_HEXA;
WLHEXP = WRITE_LONG_HEXA_PAD;
WNL = WRITE_NEWLINE;
WNLS = WRITE_NEWLINES;
WSPS = WRITE_SPACES;
WFF = WRITE_FORMFEED;
WBYTE = WRITE_BYTE;
WTEXT = WRITE_TEXT;
WTEXTP = WRITE_TEXT_P;
" COMMANDS FOR READ "
RLINE = READ_LINE;
RREC = READ_RECORD;
RNUM = READ_NUMBER; " LOGIC EQUIVALENT TO READ_HEXA "
RLNUM = READ_LONG_NUMBER; " LOGIC EQUIVALENT TO READ_LONG_HEXA "
RHEX = READ_HEXINT;
RLHEX = READ_LONG_HEXINT;
RIDENT = READ_IDENTIFIER;
RCMD = READ_CMD;
RBS = READ_BACKSPACE;
RDNC = READ_DONOT_CARES;
RBYTE = READ_BYTE;
RSB = READ_SKIP_BLANKS;
%PAGE
IMPORT VAR
INFILETYPE: FILETYPE; "INPUT FILE DESCR
OUTFILETYPE: FILETYPE; "OUTPUT FILE DESCR
URW_SAVE: REGISTERS;
PROG_NAME: FILE_NAME; "FILENAME FOR THIS PROGRAM
URW_I_OPEN: BOOLEAN; "FALSE <=> I = CIN
URW_O_OPEN: BOOLEAN; "FALSE <=> O = COUT
%PAGE
%PAGE
IMPORT PROCEDURE COMPAREBYTES
"==========================="
(R0; " NO OF BYTES
R4; " WORD ADDRESS OF FIRST REC.
R5; " - - - SECOND REC.
R6); " LINK(AT CALL)
" IF STRINGS EQUAL THEN TRUE ELSE FALSE
" (AT RETURN).
"COMPARE TWO STRINGS OF BYTES
"A 'DEL' MATCHES ALL CHAR
%PAGE
IMPORT PROCEDURE GET_AND_CON_FILE
"==============================="
(R1; " ADDRESS FILETYPE FOR READ
R2; " ADDRESS FILETYPE NEW
R3; " RETURN IF ERROR BOOLEAN (FALSE => TERMINATE)
R4; " HOW TO CREATE INTEGER (CALL)
" FILE CREATED BOOLEAN (TRUE = CREATED) (RETURN)
R5; " ADDRESS AREA/ALLOCATION SIZE (IF DEFAULT ALLOWED)
R6); " LINK (CALL)
" RESULT (RETURN):
" READ A FILE_ID, (CREATE IT) AND OPEN IT.
" THE STREAM FOR READ IS EXPECTED TO BE POSITIONED
" JUST BEFORE A FILE_ID AND WILL BE LEFT EITHER AT THE FIRST
" CHAR AFTER THE FILEID OR AT THE FIRST BLANK AFTER THE FILE-ID
" DEPENDING ON THE 'HOW TO CREATE' PARAMETER.
"
" PARAMETER DESCRIPTION:
"
" RETURN IF ERROR:
" IF THE BOOLEAN IS TRUE EVENTUAL ERRORS
" ARE RETURNED WITH THE COMPLETIONCODE IN R6, OTHERWISE THE
" PROGRAM WILL BE TERMINATED WITH AN APPROPRIATE ERRORMESSAGE.
"
" HOW TO CREATE: (ATT CALL)
" IF 0 = FALSE NO CREATION WILL BE TRIED
" IF THE BIT 'URW_READ_FILE_AT' IS SET THE STREAM WILL BE SCANNED
" FOR ATTRIBUTE PARAMETERS WITH FORMAT: <file-id>(<type>/<size>)
" (NO SPACES ALLOWED IN THE FORMAT), AND IF THE FILE IS NOT FOUND
" IT WILL BE CREATED WITH THE READ PARAMETERS.
"
" IF THE BIT 'URW_DEF_FILE_AT' IS SET THE UPPER BYTE IN
" 'HOW TO CREATE' IS SUPPOSED TO CONTAIN THE TYPE AS THE CHAR
" 'R', 'C' OR 'D' FOR RANDOM,CONTIGUOUS OR DIRECTORY AND THE
" PARAMETER AREA/ALLOCATION SIZE MUST BE A POINTER TO AN INTEGER
" OR LONG, (IF 'R' OR 'D' THE AREA SIZE (INTEGER), IF 'C' THE
" ALLOCATION SIZE (LONG) ).
" IF BOTH BITS ARE SET THE READ IS TRIED FIRST AND IF NO ATTEMPT
" HAS BEEN MADE TO DEFINE THE FILE THE DEFAULT IS USED
"
" IF THE BIT 'URW_OUT_FILE_CRE' IS SET A MESSAGE 'FILE <FILENAME>
" CREATED IS SENT TO CURRENT OUTPUT IF IT HAPPENS.
"
" HOW TO CREATE: (ATT RETURN)
" IF 1 (= TRUE) THEN A FILE IS CREATED.
%PAGE
IMPORT PROCEDURE READUSERPARAMS(R6); "ALL REGISTERS DESTROYED
"============================"
" READ USER SPECIFIED PARAMETERS: 'I' AND 'O'.
" THE FILES ARE OPENED. IS ONE OR BOTH PARAMETERS
" ABSENT, THE FILEDESCRIPTORS ARE ASSOCIATED WITH
" CIN AND COUT RESPECTIVELY.
%PAGE
IMPORT PROCEDURE READUSERPARAMSEXT
"--------------------------------"
(EXTERNAL_KEY_PROCEDURE: POINTER; "POINTER TO KEYWORD PROCEDURE
R6); "LINK ALL REGISTERS DESTROYED
"READ THE PARAMETERS AS IN READUSERPARAMS WITH FOLLOWING EXTENSION
" IF AN UNKNOWN KEYWORD IS MET THE USER SPECIFIED PROCEDURE
" WITH PROGRAM RELATIVE ADDRESS IN EXTERNAL_KEY_PROCEDURE IS CALLED.
" PARAMETERS AT CALL ARE R1: THE KEYWORD MET (2 BYTE SIGNIFICANCE)
" R4: STREAM FOR PARAMETERFILE (PFILETYPE.S)
" R6: LINK
" REGISTERCONTENTS EXPECTED AT EXIT R0-R5: INDIFFERENT
" R6 : COMPLETION CODE
" R7 : INDIFFERENT
" THE EXTERNAL PROCEDURE IS EXPECTED TO TREAT THE KEYWORD AND
" READ THE EVENTUAL CONTENTS TO THIS KEYWORD FROM THE PARAMETERSTREAM
" AND RETURN TO CALLER FOR FURTHER NORMAL TREAT WITH THE PARAMETERSTREAM
" POSITIONED AFTER THE LAST BYTE CONNECTED TO THIS KEYWORD (IT ISN'T
" NECESSARY TO BACKSPACE THE STREAM IF ONLY BLANK OR <EOF> IS SKIPPED).
" IF THE COMPLETION CODE ISN'T ZERO AT EXIT READUSERPARAMSEXT WILL
" EXECUTE THE TERMINATION 'PARAMETER FILE ERROR ILLEGAL KEYWORD'
" WITH R6 AS COMPLETION CODE.
" P.S IF THE PROCEDURE IS CALLED WITH A ZERO AS POINTER IT WILL SUPPLY
" A DUMMY PROCEDURE TO MAKE IT POSSIBLE TO GET THE 'I' AND 'O'
" PARAMETERS AND AT A LATER STATE INTERPRET THE PARAMETER FILE
" WITH THE 'READ_PARM' PROCEDURE.
" EXAMPLE:
" PROCEDURE TREATKEYWORD(R1,R6); R1:KEYWORD R6:LINK, CC_CODE
" VAR
" LINK:INTEGER;
" BEGIN
" R6 => LINK;
" <TREAT THE KEYWORD AND SET THE CC_CODE IN R6>
" EXIT(LINK);
" END;
" WHEN YOU CALL THE READUSERPARAMSEXT THE CALL WOULD BE:
" READUSERPARAMSEXT(LOCATION(TREATKEYWORD),R6);
%PAGE
IMPORT PROCEDURE REALREADWRITE
"-----------------"
(R1; "Address/Number.
R2; "Evenualy second parameter
R5; "Pointer to INOUT record.
R6); "Call: Link
"THIS PROCEDURE WILL NEVER RETURN TO CALLER
"BUT WILL EXIT VIA THE GLOBAL SAVEAREA URW_SAVE[6]
"TO THE ORIGINAL CALLER IMMEDIATELY
"general current output stream WRITE routine. ( COUT:<file-name> )
" EXAMPLE: WRITE(WRITE_TEXT, ADDRESS('THIS TEST.(:0:)') => R1, R2, R6);
" This will print the text: THIS TEST. on current output.
IMPORT PROCEDURE WRITE
"--------------------"
(function: INTEGER; "function code
r1; "address/number.
r2; "not used or length.
r6); "call: LINK
"return: CC.
"general output stream WRITE routine. ( O:<file-name> )
IMPORT PROCEDURE WRITE_OUT
"------------------------"
(function: INTEGER; "function code
r1; "address/number.
r2; "not used or length.
r6); "call: LINK
"return: CC.
"general current input stream READ routine. ( CIN:<file-name> )
IMPORT PROCEDURE READ
"--------------------"
(function: INTEGER; "function code
r1; "address/number.
r2; "not used or length.
r6); "call: LINK
"return: CC.
"general input stream READ routine. ( I:<file-name> )
IMPORT PROCEDURE READ_IN
"-----------------------"
(function: INTEGER; "function code
r1; "address/number.
r2; "not used or length.
r6); "call: LINK
"return: CC.
"general input stream READ routine. ( PARAMETER-FILE )
IMPORT PROCEDURE READ_PARM
"-------------------------"
(function: INTEGER; "function code
r1; "address/number.
r2; "not used or length.
r6); "call: LINK
"return: CC.
"general input stream READ routine. ( CURRENT-DIRECTORY-FILE )
IMPORT PROCEDURE READ_DIR
"------------------------"
(function: INTEGER; "function code
r1; "address/number.
r2; "not used or length.
r6); "call: LINK
"return: CC.
%PAGE
«a5»