DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦a9bf4a147⟧ TextFile

    Length: 1555 (0x613)
    Types: TextFile
    Notes: UNIX file
    Names: »uninit.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »unimenu/src/menu/uninit.c« 

TextFile

static char *SCCSid = "@(#)uninit.c	1.1 15:35:33 4/6/85";
/*
 *			Copyright (c) 1984
 *
 *		LANTECH Systems, Incoroporated
 *
 *			All rights reserved
 */

/*
 * Function:	deinit(mp)
 *
 * Purpose:	Clear the menu data structure.
 *
 * Passed:	A menu_f pointer
 *
 * Action:	This guy frees up all the menory it possibly can.
 *
 * Returns:	Yep.
 *
 * Called by:	Execute.
 *
 * Calls:	Free.
 *
 * History:	Original code July 84, Robert Adams.
 *
 * Notes:	This module relies on the integrity of free(3)'ed memory.
 *		MAINTAIN THAT INTEGRITY!  No malloc(3)'s, no printf's,
 *		nothin!
 */

#include "defs.h"

deinit (mp)
struct menu_f  *mp;
{
	struct choice_f *chp;
#ifdef DEBUG
write(2, "uninit\n", 7);
#endif

	if (mp == NULL)
		return;

	choice_free (&mp -> m_global);
	chp = mp -> m_list ;
	while ( chp )
	{
		choice_free (chp);
		free (chp);
		chp = chp -> c_next;
	}

#ifdef DEBUG
write(2, "uninit: choices done\n", 21);
#endif

	if (mp -> m_prompt)
		free (mp -> m_prompt);
	if (mp -> m_bad)
		free (mp -> m_bad);

	free (mp);

#ifdef DEBUG
read(0, &chp, 1);
#endif
	return;
}

choice_free (chp)
struct choice_f *chp;
{

	struct line_f *lp;

	if ( chp == NULL )
		return;

#define line_free(lp) {if(lp){free((lp)->l_key);free(lp);}}

	line_free(chp -> c_text)
	line_free(chp -> c_exec)
	line_free(chp -> c_help)
	line_free(chp->c_expl)

#undef line_free

	lp = chp -> c_list;
	while ( lp )
	{
		free(lp->l_key);
		free(lp);
		lp = lp -> l_next;
	}
	return;
}
/*free(c)char *c;{
	printf("%X from %X\n",(unsigned int)c,
		(unsigned int)(*(&c-1)));
}*/