* 27-AUG-83 JDG * *------------------------------------------- ???????.UN&PACK ---------- E:F A:S(NWLS , STKARG) *----------------------------------------------------------------------- * * PURPOSE * * PACKLINE: ADD CHAR TO AN ARRAY * EMPTLINE: UNPACK A CHAR FROM ARRAY CHARACTER INTO CHAR * * INPUT * * PACKLINE: CHAR: ELEMENT TO ADD TO ARRAY * ARRAY: ARRAY TO STUFF CHAR INTO * EMPTLINE: ARRAY: ARRAY FROM WHICH TO DRAW CHAR * * OUTPUT * * PACKLINE: UPDATED ARRAY * F:N TRUE ==> ARRAY FULL * F:N FALSE==> ARRAY NOT FULL * EMPTLINE: CHAR FROM ARRAY,UPDATED ARRAY * F:N TRUE ==> ARRAY EMPTY * F:N FALSE==> ARRAY NOT EMPTY * * LOCAL DEFINITIONS * I:R CHAR ; contains char to be put into array ; char format can be the same as fig-forth ; char is in lower byte of word '00cc' where ; cc is the hex code for a char ; or the chat format can be that of cgos where ; the char is in the high order byte and has ; the '80' bit turned on D:N ARRAY(81) ; array contains the string of packed chars ; the format of array is : ; |xxxx|cccc|cccc|cc??| ; xxxx = count of char in string ; cccc = two packed char in one word * I:R TCHAR ; temp version of char * * DATA STATEMENT * V:S MAXNDX = '80' V:S TRUE = -1 V:S FALSE = 0 * ************************************************************************ * START OF EXECUTABLE CODE ************************************************************************ * E:O PACKLINE.(CHAR,ARRAY) * W:R ARRAY(0).UGE.MAXNDX STAT = TRUE O:E W:R CHAR .L. 0 TCHAR = CHAR .RSH. 8 O:E TCHAR = CHAR .LAND. '7F' .LOR. '80' ; MAKE IT CGOS FORMAT E:L E'E STBYTT.(TCHAR, ARRAY(1), ARRAY(0)) ARRAY(0) = ARRAY(0) + 1 W:R ARRAY(0).UL.MAXNDX STAT = FALSE O:E STAT = TRUE E:L E:L # W:R ARRAY(0) .UGE. MAXNDX , E:E HEXDMP.(1,1,1,ARRAY(0)) F:N STAT * ************************************************************************ * E:O EMPTLINE.(CHAR,ARRAY) * W:R ARRAY(0).E.0, F'N TRUE ; EMPTY ARRAY ARRAY(0) = ARRAY(0) - 1 ; pull char out of array from front to back CHAR = LDBYTT.(ARRAY(1), MAXNDX - ARRAY(0)) W:R ARRAY(0).NE.0 STAT = FALSE O:E STAT = TRUE E:L F:N STAT * E:N